Commit 98a09fb4 authored by Linus Walleij's avatar Linus Walleij

Merge tag 'intel-pinctrl-v5.8-1' of...

Merge tag 'intel-pinctrl-v5.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/intel into devel

intel-pinctrl for v5.8-1

* Introduce GPIO driver for Jasper Lake
* Fix long standing bug in Sunrisepoint-H PAD locking code
* Enable pin configuration setting for GPIO chip for Baytrail
* Work around race condition in Cherriview hardware when handle IRQ
* Clean up Cherryview code to be closer to other drivers

The following is an automated git shortlog grouped by driver:

baytrail:
 -  Use platform_get_irq_optional() explicitly
 -  Enable pin configuration setting for GPIO chip

cannonlake:
 -  Use generic flag for special GPIO base treatment

cherryview:
 -  Add missing spinlock usage in chv_gpio_irq_handler
 -  Use GENMASK() consistently
 -  Re-use data structures from pinctrl-intel.h (part 2)

icelake:
 -  Use generic flag for special GPIO base treatment

intel:
 -  Move npins closer to pin_base in struct intel_community
 -  Update description in struct intel_community
 -  Add Intel Jasper Lake pin controller support
 -  Introduce new flag to force GPIO base to be 0
 -  Introduce common flags for GPIO mapping scheme

lynxpoint:
 -  Use platform_get_irq_optional() explicitly

sunrisepoint:
 -  Fix PAD lock register offset for SPT-H

tigerlake:
 -  Use generic flag for special GPIO base treatment
parents d7faa8ff 6d649fca
...@@ -111,6 +111,14 @@ config PINCTRL_ICELAKE ...@@ -111,6 +111,14 @@ config PINCTRL_ICELAKE
This pinctrl driver provides an interface that allows configuring This pinctrl driver provides an interface that allows configuring
of Intel Ice Lake PCH pins and using them as GPIOs. of Intel Ice Lake PCH pins and using them as GPIOs.
config PINCTRL_JASPERLAKE
tristate "Intel Jasper Lake PCH pinctrl and GPIO driver"
depends on ACPI
select PINCTRL_INTEL
help
This pinctrl driver provides an interface that allows configuring
of Intel Jasper Lake PCH pins and using them as GPIOs.
config PINCTRL_LEWISBURG config PINCTRL_LEWISBURG
tristate "Intel Lewisburg pinctrl and GPIO driver" tristate "Intel Lewisburg pinctrl and GPIO driver"
depends on ACPI depends on ACPI
......
...@@ -12,6 +12,7 @@ obj-$(CONFIG_PINCTRL_CEDARFORK) += pinctrl-cedarfork.o ...@@ -12,6 +12,7 @@ obj-$(CONFIG_PINCTRL_CEDARFORK) += pinctrl-cedarfork.o
obj-$(CONFIG_PINCTRL_DENVERTON) += pinctrl-denverton.o obj-$(CONFIG_PINCTRL_DENVERTON) += pinctrl-denverton.o
obj-$(CONFIG_PINCTRL_GEMINILAKE) += pinctrl-geminilake.o obj-$(CONFIG_PINCTRL_GEMINILAKE) += pinctrl-geminilake.o
obj-$(CONFIG_PINCTRL_ICELAKE) += pinctrl-icelake.o obj-$(CONFIG_PINCTRL_ICELAKE) += pinctrl-icelake.o
obj-$(CONFIG_PINCTRL_JASPERLAKE) += pinctrl-jasperlake.o
obj-$(CONFIG_PINCTRL_LEWISBURG) += pinctrl-lewisburg.o obj-$(CONFIG_PINCTRL_LEWISBURG) += pinctrl-lewisburg.o
obj-$(CONFIG_PINCTRL_SUNRISEPOINT) += pinctrl-sunrisepoint.o obj-$(CONFIG_PINCTRL_SUNRISEPOINT) += pinctrl-sunrisepoint.o
obj-$(CONFIG_PINCTRL_TIGERLAKE) += pinctrl-tigerlake.o obj-$(CONFIG_PINCTRL_TIGERLAKE) += pinctrl-tigerlake.o
...@@ -1286,6 +1286,7 @@ static const struct gpio_chip byt_gpio_chip = { ...@@ -1286,6 +1286,7 @@ static const struct gpio_chip byt_gpio_chip = {
.direction_output = byt_gpio_direction_output, .direction_output = byt_gpio_direction_output,
.get = byt_gpio_get, .get = byt_gpio_get,
.set = byt_gpio_set, .set = byt_gpio_set,
.set_config = gpiochip_generic_config,
.dbg_show = byt_gpio_dbg_show, .dbg_show = byt_gpio_dbg_show,
}; };
...@@ -1505,8 +1506,7 @@ static int byt_gpio_probe(struct intel_pinctrl *vg) ...@@ -1505,8 +1506,7 @@ static int byt_gpio_probe(struct intel_pinctrl *vg)
{ {
struct platform_device *pdev = to_platform_device(vg->dev); struct platform_device *pdev = to_platform_device(vg->dev);
struct gpio_chip *gc; struct gpio_chip *gc;
struct resource *irq_rc; int irq, ret;
int ret;
/* Set up gpio chip */ /* Set up gpio chip */
vg->chip = byt_gpio_chip; vg->chip = byt_gpio_chip;
...@@ -1526,8 +1526,8 @@ static int byt_gpio_probe(struct intel_pinctrl *vg) ...@@ -1526,8 +1526,8 @@ static int byt_gpio_probe(struct intel_pinctrl *vg)
#endif #endif
/* set up interrupts */ /* set up interrupts */
irq_rc = platform_get_resource(pdev, IORESOURCE_IRQ, 0); irq = platform_get_irq_optional(pdev, 0);
if (irq_rc && irq_rc->start) { if (irq > 0) {
struct gpio_irq_chip *girq; struct gpio_irq_chip *girq;
vg->irqchip.name = "BYT-GPIO", vg->irqchip.name = "BYT-GPIO",
...@@ -1547,7 +1547,7 @@ static int byt_gpio_probe(struct intel_pinctrl *vg) ...@@ -1547,7 +1547,7 @@ static int byt_gpio_probe(struct intel_pinctrl *vg)
sizeof(*girq->parents), GFP_KERNEL); sizeof(*girq->parents), GFP_KERNEL);
if (!girq->parents) if (!girq->parents)
return -ENOMEM; return -ENOMEM;
girq->parents[0] = (unsigned int)irq_rc->start; girq->parents[0] = irq;
girq->default_type = IRQ_TYPE_NONE; girq->default_type = IRQ_TYPE_NONE;
girq->handler = handle_bad_irq; girq->handler = handle_bad_irq;
} }
......
...@@ -30,8 +30,6 @@ ...@@ -30,8 +30,6 @@
.gpio_base = (g), \ .gpio_base = (g), \
} }
#define CNL_NO_GPIO -1
#define CNL_COMMUNITY(b, s, e, o, g) \ #define CNL_COMMUNITY(b, s, e, o, g) \
{ \ { \
.barno = (b), \ .barno = (b), \
...@@ -377,27 +375,27 @@ static const struct intel_padgroup cnlh_community0_gpps[] = { ...@@ -377,27 +375,27 @@ static const struct intel_padgroup cnlh_community0_gpps[] = {
}; };
static const struct intel_padgroup cnlh_community1_gpps[] = { static const struct intel_padgroup cnlh_community1_gpps[] = {
CNL_GPP(0, 51, 74, 64), /* GPP_C */ CNL_GPP(0, 51, 74, 64), /* GPP_C */
CNL_GPP(1, 75, 98, 96), /* GPP_D */ CNL_GPP(1, 75, 98, 96), /* GPP_D */
CNL_GPP(2, 99, 106, 128), /* GPP_G */ CNL_GPP(2, 99, 106, 128), /* GPP_G */
CNL_GPP(3, 107, 114, CNL_NO_GPIO), /* AZA */ CNL_GPP(3, 107, 114, INTEL_GPIO_BASE_NOMAP), /* AZA */
CNL_GPP(4, 115, 146, 160), /* vGPIO_0 */ CNL_GPP(4, 115, 146, 160), /* vGPIO_0 */
CNL_GPP(5, 147, 154, CNL_NO_GPIO), /* vGPIO_1 */ CNL_GPP(5, 147, 154, INTEL_GPIO_BASE_NOMAP), /* vGPIO_1 */
}; };
static const struct intel_padgroup cnlh_community3_gpps[] = { static const struct intel_padgroup cnlh_community3_gpps[] = {
CNL_GPP(0, 155, 178, 192), /* GPP_K */ CNL_GPP(0, 155, 178, 192), /* GPP_K */
CNL_GPP(1, 179, 202, 224), /* GPP_H */ CNL_GPP(1, 179, 202, 224), /* GPP_H */
CNL_GPP(2, 203, 215, 256), /* GPP_E */ CNL_GPP(2, 203, 215, 256), /* GPP_E */
CNL_GPP(3, 216, 239, 288), /* GPP_F */ CNL_GPP(3, 216, 239, 288), /* GPP_F */
CNL_GPP(4, 240, 248, CNL_NO_GPIO), /* SPI */ CNL_GPP(4, 240, 248, INTEL_GPIO_BASE_NOMAP), /* SPI */
}; };
static const struct intel_padgroup cnlh_community4_gpps[] = { static const struct intel_padgroup cnlh_community4_gpps[] = {
CNL_GPP(0, 249, 259, CNL_NO_GPIO), /* CPU */ CNL_GPP(0, 249, 259, INTEL_GPIO_BASE_NOMAP), /* CPU */
CNL_GPP(1, 260, 268, CNL_NO_GPIO), /* JTAG */ CNL_GPP(1, 260, 268, INTEL_GPIO_BASE_NOMAP), /* JTAG */
CNL_GPP(2, 269, 286, 320), /* GPP_I */ CNL_GPP(2, 269, 286, 320), /* GPP_I */
CNL_GPP(3, 287, 298, 352), /* GPP_J */ CNL_GPP(3, 287, 298, 352), /* GPP_J */
}; };
static const unsigned int cnlh_spi0_pins[] = { 40, 41, 42, 43 }; static const unsigned int cnlh_spi0_pins[] = { 40, 41, 42, 43 };
...@@ -790,25 +788,25 @@ static const struct intel_function cnllp_functions[] = { ...@@ -790,25 +788,25 @@ static const struct intel_function cnllp_functions[] = {
}; };
static const struct intel_padgroup cnllp_community0_gpps[] = { static const struct intel_padgroup cnllp_community0_gpps[] = {
CNL_GPP(0, 0, 24, 0), /* GPP_A */ CNL_GPP(0, 0, 24, 0), /* GPP_A */
CNL_GPP(1, 25, 50, 32), /* GPP_B */ CNL_GPP(1, 25, 50, 32), /* GPP_B */
CNL_GPP(2, 51, 58, 64), /* GPP_G */ CNL_GPP(2, 51, 58, 64), /* GPP_G */
CNL_GPP(3, 59, 67, CNL_NO_GPIO), /* SPI */ CNL_GPP(3, 59, 67, INTEL_GPIO_BASE_NOMAP), /* SPI */
}; };
static const struct intel_padgroup cnllp_community1_gpps[] = { static const struct intel_padgroup cnllp_community1_gpps[] = {
CNL_GPP(0, 68, 92, 96), /* GPP_D */ CNL_GPP(0, 68, 92, 96), /* GPP_D */
CNL_GPP(1, 93, 116, 128), /* GPP_F */ CNL_GPP(1, 93, 116, 128), /* GPP_F */
CNL_GPP(2, 117, 140, 160), /* GPP_H */ CNL_GPP(2, 117, 140, 160), /* GPP_H */
CNL_GPP(3, 141, 172, 192), /* vGPIO */ CNL_GPP(3, 141, 172, 192), /* vGPIO */
CNL_GPP(4, 173, 180, 224), /* vGPIO */ CNL_GPP(4, 173, 180, 224), /* vGPIO */
}; };
static const struct intel_padgroup cnllp_community4_gpps[] = { static const struct intel_padgroup cnllp_community4_gpps[] = {
CNL_GPP(0, 181, 204, 256), /* GPP_C */ CNL_GPP(0, 181, 204, 256), /* GPP_C */
CNL_GPP(1, 205, 228, 288), /* GPP_E */ CNL_GPP(1, 205, 228, 288), /* GPP_E */
CNL_GPP(2, 229, 237, CNL_NO_GPIO), /* JTAG */ CNL_GPP(2, 229, 237, INTEL_GPIO_BASE_NOMAP), /* JTAG */
CNL_GPP(3, 238, 243, CNL_NO_GPIO), /* HVCMOS */ CNL_GPP(3, 238, 243, INTEL_GPIO_BASE_NOMAP), /* HVCMOS */
}; };
static const struct intel_community cnllp_communities[] = { static const struct intel_community cnllp_communities[] = {
......
This diff is collapsed.
...@@ -29,8 +29,6 @@ ...@@ -29,8 +29,6 @@
.gpio_base = (g), \ .gpio_base = (g), \
} }
#define ICL_NO_GPIO -1
#define ICL_COMMUNITY(b, s, e, g) \ #define ICL_COMMUNITY(b, s, e, g) \
{ \ { \
.barno = (b), \ .barno = (b), \
...@@ -305,29 +303,29 @@ static const struct pinctrl_pin_desc icllp_pins[] = { ...@@ -305,29 +303,29 @@ static const struct pinctrl_pin_desc icllp_pins[] = {
}; };
static const struct intel_padgroup icllp_community0_gpps[] = { static const struct intel_padgroup icllp_community0_gpps[] = {
ICL_GPP(0, 0, 7, 0), /* GPP_G */ ICL_GPP(0, 0, 7, 0), /* GPP_G */
ICL_GPP(1, 8, 33, 32), /* GPP_B */ ICL_GPP(1, 8, 33, 32), /* GPP_B */
ICL_GPP(2, 34, 58, 64), /* GPP_A */ ICL_GPP(2, 34, 58, 64), /* GPP_A */
}; };
static const struct intel_padgroup icllp_community1_gpps[] = { static const struct intel_padgroup icllp_community1_gpps[] = {
ICL_GPP(0, 59, 82, 96), /* GPP_H */ ICL_GPP(0, 59, 82, 96), /* GPP_H */
ICL_GPP(1, 83, 103, 128), /* GPP_D */ ICL_GPP(1, 83, 103, 128), /* GPP_D */
ICL_GPP(2, 104, 123, 160), /* GPP_F */ ICL_GPP(2, 104, 123, 160), /* GPP_F */
ICL_GPP(3, 124, 152, 192), /* vGPIO */ ICL_GPP(3, 124, 152, 192), /* vGPIO */
}; };
static const struct intel_padgroup icllp_community4_gpps[] = { static const struct intel_padgroup icllp_community4_gpps[] = {
ICL_GPP(0, 153, 176, 224), /* GPP_C */ ICL_GPP(0, 153, 176, 224), /* GPP_C */
ICL_GPP(1, 177, 182, ICL_NO_GPIO), /* HVCMOS */ ICL_GPP(1, 177, 182, INTEL_GPIO_BASE_NOMAP), /* HVCMOS */
ICL_GPP(2, 183, 206, 256), /* GPP_E */ ICL_GPP(2, 183, 206, 256), /* GPP_E */
ICL_GPP(3, 207, 215, ICL_NO_GPIO), /* JTAG */ ICL_GPP(3, 207, 215, INTEL_GPIO_BASE_NOMAP), /* JTAG */
}; };
static const struct intel_padgroup icllp_community5_gpps[] = { static const struct intel_padgroup icllp_community5_gpps[] = {
ICL_GPP(0, 216, 223, 288), /* GPP_R */ ICL_GPP(0, 216, 223, 288), /* GPP_R */
ICL_GPP(1, 224, 231, 320), /* GPP_S */ ICL_GPP(1, 224, 231, 320), /* GPP_S */
ICL_GPP(2, 232, 240, ICL_NO_GPIO), /* SPI */ ICL_GPP(2, 232, 240, INTEL_GPIO_BASE_NOMAP), /* SPI */
}; };
static const struct intel_community icllp_communities[] = { static const struct intel_community icllp_communities[] = {
......
...@@ -798,7 +798,7 @@ static int intel_gpio_to_pin(struct intel_pinctrl *pctrl, unsigned int offset, ...@@ -798,7 +798,7 @@ static int intel_gpio_to_pin(struct intel_pinctrl *pctrl, unsigned int offset,
for (j = 0; j < comm->ngpps; j++) { for (j = 0; j < comm->ngpps; j++) {
const struct intel_padgroup *pgrp = &comm->gpps[j]; const struct intel_padgroup *pgrp = &comm->gpps[j];
if (pgrp->gpio_base < 0) if (pgrp->gpio_base == INTEL_GPIO_BASE_NOMAP)
continue; continue;
if (offset >= pgrp->gpio_base && if (offset >= pgrp->gpio_base &&
...@@ -1138,7 +1138,7 @@ static int intel_gpio_add_community_ranges(struct intel_pinctrl *pctrl, ...@@ -1138,7 +1138,7 @@ static int intel_gpio_add_community_ranges(struct intel_pinctrl *pctrl,
for (i = 0; i < community->ngpps; i++) { for (i = 0; i < community->ngpps; i++) {
const struct intel_padgroup *gpp = &community->gpps[i]; const struct intel_padgroup *gpp = &community->gpps[i];
if (gpp->gpio_base < 0) if (gpp->gpio_base == INTEL_GPIO_BASE_NOMAP)
continue; continue;
ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev), ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev),
...@@ -1180,7 +1180,7 @@ static unsigned int intel_gpio_ngpio(const struct intel_pinctrl *pctrl) ...@@ -1180,7 +1180,7 @@ static unsigned int intel_gpio_ngpio(const struct intel_pinctrl *pctrl)
for (j = 0; j < community->ngpps; j++) { for (j = 0; j < community->ngpps; j++) {
const struct intel_padgroup *gpp = &community->gpps[j]; const struct intel_padgroup *gpp = &community->gpps[j];
if (gpp->gpio_base < 0) if (gpp->gpio_base == INTEL_GPIO_BASE_NOMAP)
continue; continue;
if (gpp->gpio_base + gpp->size > ngpio) if (gpp->gpio_base + gpp->size > ngpio)
...@@ -1276,8 +1276,18 @@ static int intel_pinctrl_add_padgroups(struct intel_pinctrl *pctrl, ...@@ -1276,8 +1276,18 @@ static int intel_pinctrl_add_padgroups(struct intel_pinctrl *pctrl,
if (gpps[i].size > 32) if (gpps[i].size > 32)
return -EINVAL; return -EINVAL;
if (!gpps[i].gpio_base) /* Special treatment for GPIO base */
gpps[i].gpio_base = gpps[i].base; switch (gpps[i].gpio_base) {
case INTEL_GPIO_BASE_MATCH:
gpps[i].gpio_base = gpps[i].base;
break;
case INTEL_GPIO_BASE_ZERO:
gpps[i].gpio_base = 0;
break;
case INTEL_GPIO_BASE_NOMAP:
default:
break;
}
gpps[i].padown_num = padown_num; gpps[i].padown_num = padown_num;
...@@ -1596,7 +1606,7 @@ static void intel_restore_hostown(struct intel_pinctrl *pctrl, unsigned int c, ...@@ -1596,7 +1606,7 @@ static void intel_restore_hostown(struct intel_pinctrl *pctrl, unsigned int c,
struct device *dev = pctrl->dev; struct device *dev = pctrl->dev;
u32 requested; u32 requested;
if (padgrp->gpio_base < 0) if (padgrp->gpio_base == INTEL_GPIO_BASE_NOMAP)
return; return;
requested = intel_gpio_is_requested(&pctrl->chip, padgrp->gpio_base, padgrp->size); requested = intel_gpio_is_requested(&pctrl->chip, padgrp->gpio_base, padgrp->size);
......
...@@ -53,8 +53,7 @@ struct intel_function { ...@@ -53,8 +53,7 @@ struct intel_function {
* @reg_num: GPI_IS register number * @reg_num: GPI_IS register number
* @base: Starting pin of this group * @base: Starting pin of this group
* @size: Size of this group (maximum is 32). * @size: Size of this group (maximum is 32).
* @gpio_base: Starting GPIO base of this group (%0 if matches with @base, * @gpio_base: Starting GPIO base of this group
* and %-1 if no GPIO mapping should be created)
* @padown_num: PAD_OWN register number (assigned by the core driver) * @padown_num: PAD_OWN register number (assigned by the core driver)
* *
* If pad groups of a community are not the same size, use this structure * If pad groups of a community are not the same size, use this structure
...@@ -68,6 +67,19 @@ struct intel_padgroup { ...@@ -68,6 +67,19 @@ struct intel_padgroup {
unsigned int padown_num; unsigned int padown_num;
}; };
/**
* enum - Special treatment for GPIO base in pad group
*
* @INTEL_GPIO_BASE_ZERO: force GPIO base to be 0
* @INTEL_GPIO_BASE_NOMAP: no GPIO mapping should be created
* @INTEL_GPIO_BASE_MATCH: matches with starting pin number
*/
enum {
INTEL_GPIO_BASE_ZERO = -2,
INTEL_GPIO_BASE_NOMAP = -1,
INTEL_GPIO_BASE_MATCH = 0,
};
/** /**
* struct intel_community - Intel pin community description * struct intel_community - Intel pin community description
* @barno: MMIO BAR number where registers for this community reside * @barno: MMIO BAR number where registers for this community reside
...@@ -82,20 +94,20 @@ struct intel_padgroup { ...@@ -82,20 +94,20 @@ struct intel_padgroup {
* @ie_offset: Register offset of GPI_IE from @regs. * @ie_offset: Register offset of GPI_IE from @regs.
* @features: Additional features supported by the hardware * @features: Additional features supported by the hardware
* @pin_base: Starting pin of pins in this community * @pin_base: Starting pin of pins in this community
* @npins: Number of pins in this community
* @gpp_size: Maximum number of pads in each group, such as PADCFGLOCK, * @gpp_size: Maximum number of pads in each group, such as PADCFGLOCK,
* HOSTSW_OWN, GPI_IS, GPI_IE, etc. Used when @gpps is %NULL. * HOSTSW_OWN, GPI_IS, GPI_IE. Used when @gpps is %NULL.
* @gpp_num_padown_regs: Number of pad registers each pad group consumes at * @gpp_num_padown_regs: Number of pad registers each pad group consumes at
* minimum. Use %0 if the number of registers can be * minimum. Use %0 if the number of registers can be
* determined by the size of the group. * determined by the size of the group.
* @npins: Number of pins in this community
* @gpps: Pad groups if the controller has variable size pad groups * @gpps: Pad groups if the controller has variable size pad groups
* @ngpps: Number of pad groups in this community * @ngpps: Number of pad groups in this community
* @pad_map: Optional non-linear mapping of the pads * @pad_map: Optional non-linear mapping of the pads
* @regs: Community specific common registers (reserved for core driver) * @regs: Community specific common registers (reserved for core driver)
* @pad_regs: Community specific pad registers (reserved for core driver) * @pad_regs: Community specific pad registers (reserved for core driver)
* *
* Most Intel GPIO host controllers this driver supports each pad group is * In some of Intel GPIO host controllers this driver supports each pad group
* of equal size (except the last one). In that case the driver can just * is of equal size (except the last one). In that case the driver can just
* fill in @gpp_size field and let the core driver to handle the rest. If * fill in @gpp_size field and let the core driver to handle the rest. If
* the controller has pad groups of variable size the client driver can * the controller has pad groups of variable size the client driver can
* pass custom @gpps and @ngpps instead. * pass custom @gpps and @ngpps instead.
...@@ -109,12 +121,13 @@ struct intel_community { ...@@ -109,12 +121,13 @@ struct intel_community {
unsigned int ie_offset; unsigned int ie_offset;
unsigned int features; unsigned int features;
unsigned int pin_base; unsigned int pin_base;
size_t npins;
unsigned int gpp_size; unsigned int gpp_size;
unsigned int gpp_num_padown_regs; unsigned int gpp_num_padown_regs;
size_t npins;
const struct intel_padgroup *gpps; const struct intel_padgroup *gpps;
size_t ngpps; size_t ngpps;
const unsigned int *pad_map; const unsigned int *pad_map;
/* Reserved for the core driver */ /* Reserved for the core driver */
void __iomem *regs; void __iomem *regs;
void __iomem *pad_regs; void __iomem *pad_regs;
......
This diff is collapsed.
...@@ -794,11 +794,11 @@ static int lp_gpio_probe(struct platform_device *pdev) ...@@ -794,11 +794,11 @@ static int lp_gpio_probe(struct platform_device *pdev)
const struct intel_pinctrl_soc_data *soc; const struct intel_pinctrl_soc_data *soc;
struct intel_pinctrl *lg; struct intel_pinctrl *lg;
struct gpio_chip *gc; struct gpio_chip *gc;
struct resource *io_rc, *irq_rc;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *io_rc;
void __iomem *regs; void __iomem *regs;
unsigned int i; unsigned int i;
int ret; int irq, ret;
soc = (const struct intel_pinctrl_soc_data *)device_get_match_data(dev); soc = (const struct intel_pinctrl_soc_data *)device_get_match_data(dev);
if (!soc) if (!soc)
...@@ -870,8 +870,8 @@ static int lp_gpio_probe(struct platform_device *pdev) ...@@ -870,8 +870,8 @@ static int lp_gpio_probe(struct platform_device *pdev)
gc->parent = dev; gc->parent = dev;
/* set up interrupts */ /* set up interrupts */
irq_rc = platform_get_resource(pdev, IORESOURCE_IRQ, 0); irq = platform_get_irq_optional(pdev, 0);
if (irq_rc && irq_rc->start) { if (irq > 0) {
struct gpio_irq_chip *girq; struct gpio_irq_chip *girq;
girq = &gc->irq; girq = &gc->irq;
...@@ -884,7 +884,7 @@ static int lp_gpio_probe(struct platform_device *pdev) ...@@ -884,7 +884,7 @@ static int lp_gpio_probe(struct platform_device *pdev)
GFP_KERNEL); GFP_KERNEL);
if (!girq->parents) if (!girq->parents)
return -ENOMEM; return -ENOMEM;
girq->parents[0] = (unsigned int)irq_rc->start; girq->parents[0] = irq;
girq->default_type = IRQ_TYPE_NONE; girq->default_type = IRQ_TYPE_NONE;
girq->handler = handle_bad_irq; girq->handler = handle_bad_irq;
} }
......
...@@ -15,17 +15,18 @@ ...@@ -15,17 +15,18 @@
#include "pinctrl-intel.h" #include "pinctrl-intel.h"
#define SPT_PAD_OWN 0x020 #define SPT_PAD_OWN 0x020
#define SPT_PADCFGLOCK 0x0a0 #define SPT_H_PADCFGLOCK 0x090
#define SPT_HOSTSW_OWN 0x0d0 #define SPT_LP_PADCFGLOCK 0x0a0
#define SPT_GPI_IS 0x100 #define SPT_HOSTSW_OWN 0x0d0
#define SPT_GPI_IE 0x120 #define SPT_GPI_IS 0x100
#define SPT_GPI_IE 0x120
#define SPT_COMMUNITY(b, s, e) \ #define SPT_COMMUNITY(b, s, e) \
{ \ { \
.barno = (b), \ .barno = (b), \
.padown_offset = SPT_PAD_OWN, \ .padown_offset = SPT_PAD_OWN, \
.padcfglock_offset = SPT_PADCFGLOCK, \ .padcfglock_offset = SPT_LP_PADCFGLOCK, \
.hostown_offset = SPT_HOSTSW_OWN, \ .hostown_offset = SPT_HOSTSW_OWN, \
.is_offset = SPT_GPI_IS, \ .is_offset = SPT_GPI_IS, \
.ie_offset = SPT_GPI_IE, \ .ie_offset = SPT_GPI_IE, \
...@@ -47,7 +48,7 @@ ...@@ -47,7 +48,7 @@
{ \ { \
.barno = (b), \ .barno = (b), \
.padown_offset = SPT_PAD_OWN, \ .padown_offset = SPT_PAD_OWN, \
.padcfglock_offset = SPT_PADCFGLOCK, \ .padcfglock_offset = SPT_H_PADCFGLOCK, \
.hostown_offset = SPT_HOSTSW_OWN, \ .hostown_offset = SPT_HOSTSW_OWN, \
.is_offset = SPT_GPI_IS, \ .is_offset = SPT_GPI_IS, \
.ie_offset = SPT_GPI_IE, \ .ie_offset = SPT_GPI_IE, \
......
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#define TGL_GPI_IS 0x100 #define TGL_GPI_IS 0x100
#define TGL_GPI_IE 0x120 #define TGL_GPI_IE 0x120
#define TGL_NO_GPIO -1
#define TGL_GPP(r, s, e, g) \ #define TGL_GPP(r, s, e, g) \
{ \ { \
.reg_num = (r), \ .reg_num = (r), \
...@@ -342,30 +340,30 @@ static const struct pinctrl_pin_desc tgllp_pins[] = { ...@@ -342,30 +340,30 @@ static const struct pinctrl_pin_desc tgllp_pins[] = {
}; };
static const struct intel_padgroup tgllp_community0_gpps[] = { static const struct intel_padgroup tgllp_community0_gpps[] = {
TGL_GPP(0, 0, 25, 0), /* GPP_B */ TGL_GPP(0, 0, 25, 0), /* GPP_B */
TGL_GPP(1, 26, 41, 32), /* GPP_T */ TGL_GPP(1, 26, 41, 32), /* GPP_T */
TGL_GPP(2, 42, 66, 64), /* GPP_A */ TGL_GPP(2, 42, 66, 64), /* GPP_A */
}; };
static const struct intel_padgroup tgllp_community1_gpps[] = { static const struct intel_padgroup tgllp_community1_gpps[] = {
TGL_GPP(0, 67, 74, 96), /* GPP_S */ TGL_GPP(0, 67, 74, 96), /* GPP_S */
TGL_GPP(1, 75, 98, 128), /* GPP_H */ TGL_GPP(1, 75, 98, 128), /* GPP_H */
TGL_GPP(2, 99, 119, 160), /* GPP_D */ TGL_GPP(2, 99, 119, 160), /* GPP_D */
TGL_GPP(3, 120, 143, 192), /* GPP_U */ TGL_GPP(3, 120, 143, 192), /* GPP_U */
TGL_GPP(4, 144, 170, 224), /* vGPIO */ TGL_GPP(4, 144, 170, 224), /* vGPIO */
}; };
static const struct intel_padgroup tgllp_community4_gpps[] = { static const struct intel_padgroup tgllp_community4_gpps[] = {
TGL_GPP(0, 171, 194, 256), /* GPP_C */ TGL_GPP(0, 171, 194, 256), /* GPP_C */
TGL_GPP(1, 195, 219, 288), /* GPP_F */ TGL_GPP(1, 195, 219, 288), /* GPP_F */
TGL_GPP(2, 220, 225, TGL_NO_GPIO), /* HVCMOS */ TGL_GPP(2, 220, 225, INTEL_GPIO_BASE_NOMAP), /* HVCMOS */
TGL_GPP(3, 226, 250, 320), /* GPP_E */ TGL_GPP(3, 226, 250, 320), /* GPP_E */
TGL_GPP(4, 251, 259, TGL_NO_GPIO), /* JTAG */ TGL_GPP(4, 251, 259, INTEL_GPIO_BASE_NOMAP), /* JTAG */
}; };
static const struct intel_padgroup tgllp_community5_gpps[] = { static const struct intel_padgroup tgllp_community5_gpps[] = {
TGL_GPP(0, 260, 267, 352), /* GPP_R */ TGL_GPP(0, 260, 267, 352), /* GPP_R */
TGL_GPP(1, 268, 276, TGL_NO_GPIO), /* SPI */ TGL_GPP(1, 268, 276, INTEL_GPIO_BASE_NOMAP), /* SPI */
}; };
static const struct intel_community tgllp_communities[] = { static const struct intel_community tgllp_communities[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment