pinctrl: intel: Introduce common flags for GPIO mapping scheme
Subsystems (3)
PATCH v2 1/6 pinctrl: intel: Introduce common flags for GPIO mapping scheme
Few drivers are using the same flag to tell Intel pin control core how to interpret GPIO base.
Provide a generic flags so all drivers can use.
---
v2: replace defines with enum with kernel doc descriptions (Mika)
drivers/pinctrl/intel/pinctrl-intel.c | 19 +++++++++++++------ drivers/pinctrl/intel/pinctrl-intel.h | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 8 deletions(-)
drivers/pinctrl/intel/pinctrl-intel.c +13 -6
@@ -798,7 +798,7 @@ static int intel_gpio_to_pin(struct intel_pinctrl *pctrl, unsigned int offset,for (j =0 ; j < comm->ngpps; j++) {const struct intel_padgroup *pgrp = &comm->gpps[j]; -if (pgrp->gpio_base <0 ) +if (pgrp->gpio_base ==INTEL_GPIO_BASE_NOMAP )continue ; if (offset >= pgrp->gpio_base &&
@@ -1138,7 +1138,7 @@ static int intel_gpio_add_community_ranges(struct intel_pinctrl *pctrl,for (i =0 ; i < community->ngpps; i++) {const struct intel_padgroup *gpp = &community->gpps[i]; -if (gpp->gpio_base <0 ) +if (gpp->gpio_base ==INTEL_GPIO_BASE_NOMAP )continue ; 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)for (j =0 ; j < community->ngpps; j++) {const struct intel_padgroup *gpp = &community->gpps[j]; -if (gpp->gpio_base <0 ) +if (gpp->gpio_base ==INTEL_GPIO_BASE_NOMAP )continue ;if (gpp->gpio_base + gpp->size > ngpio)
@@ -1276,8 +1276,15 @@ static int intel_pinctrl_add_padgroups(struct intel_pinctrl *pctrl,if (gpps[i].size >32 )return -EINVAL ; -if (!gpps[i].gpio_base) - gpps[i].gpio_base = gpps[i].base; +/* Special treatment for GPIO base */ +switch (gpps[i].gpio_base) { +case INTEL_GPIO_BASE_MATCH : + gpps[i].gpio_base = gpps[i].base; +break ; +case INTEL_GPIO_BASE_NOMAP : +default : +break ; + } gpps[i].padown_num = padown_num;
@@ -1596,7 +1603,7 @@ static void intel_restore_hostown(struct intel_pinctrl *pctrl, unsigned int c,struct device *dev = pctrl->dev;u32 requested; -if (padgrp->gpio_base <0 ) +if (padgrp->gpio_base ==INTEL_GPIO_BASE_NOMAP )return ; requested =intel_gpio_is_requested (&pctrl->chip, padgrp->gpio_base, padgrp->size);
drivers/pinctrl/intel/pinctrl-intel.h +12 -2
@@ -53,8 +53,7 @@ struct intel_function {* @reg_num: GPI_IS register number * @base: Starting pin of this group * @size: Size of this group (maximum is 32). -* @gpio_base: Starting GPIO base of this group (%0 if matches with @base, -* and %-1 if no GPIO mapping should be created) +* @gpio_base: Starting GPIO base of this group * @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
@@ -68,6 +67,17 @@ struct intel_padgroup {unsigned int padown_num; }; +/** +* enum - Special treatment for GPIO base in pad group +* +* @INTEL_GPIO_BASE_NOMAP: no GPIO mapping should be created +* @INTEL_GPIO_BASE_MATCH: matches with starting pin number +*/ +enum { +INTEL_GPIO_BASE_NOMAP =-1 , +INTEL_GPIO_BASE_MATCH =0 , +}; +/** * struct intel_community - Intel pin community description * @barno: MMIO BAR number where registers for this community reside
Signature · 1 line
2.25.1
PATCH v2 2/6 pinctrl: cannonlake: Use generic flag for special GPIO base treatment
Since we have a generic flag for special GPIO base treatment, use it in the driver.
---
v2: no changes
drivers/pinctrl/intel/pinctrl-cannonlake.c | 58 +++++++++++----------- 1 file changed, 28 insertions(+), 30 deletions(-)
drivers/pinctrl/intel/pinctrl-cannonlake.c +28 -30
@@ -30,8 +30,6 @@ .gpio_base = (g), \ } -#define CNL_NO_GPIO -1 -#define CNL_COMMUNITY (b, s, e, o, g) \ { \ .barno = (b), \
@@ -377,27 +375,27 @@ static const struct intel_padgroup cnlh_community0_gpps[] = { };static const struct intel_padgroup cnlh_community1_gpps[] = { -CNL_GPP (0 ,51 ,74 ,64 ),/* GPP_C */ -CNL_GPP (1 ,75 ,98 ,96 ),/* GPP_D */ -CNL_GPP (2 ,99 ,106 ,128 ),/* GPP_G */ -CNL_GPP (3 ,107 ,114 ,CNL_NO_GPIO ),/* AZA */ -CNL_GPP (4 ,115 ,146 ,160 ),/* vGPIO_0 */ -CNL_GPP (5 ,147 ,154 ,CNL_NO_GPIO ),/* vGPIO_1 */ +CNL_GPP (0 ,51 ,74 ,64 ),/* GPP_C */ +CNL_GPP (1 ,75 ,98 ,96 ),/* GPP_D */ +CNL_GPP (2 ,99 ,106 ,128 ),/* GPP_G */ +CNL_GPP (3 ,107 ,114 ,INTEL_GPIO_BASE_NOMAP ),/* AZA */ +CNL_GPP (4 ,115 ,146 ,160 ),/* vGPIO_0 */ +CNL_GPP (5 ,147 ,154 ,INTEL_GPIO_BASE_NOMAP ),/* vGPIO_1 */ };static const struct intel_padgroup cnlh_community3_gpps[] = { -CNL_GPP (0 ,155 ,178 ,192 ),/* GPP_K */ -CNL_GPP (1 ,179 ,202 ,224 ),/* GPP_H */ -CNL_GPP (2 ,203 ,215 ,256 ),/* GPP_E */ -CNL_GPP (3 ,216 ,239 ,288 ),/* GPP_F */ -CNL_GPP (4 ,240 ,248 ,CNL_NO_GPIO ),/* SPI */ +CNL_GPP (0 ,155 ,178 ,192 ),/* GPP_K */ +CNL_GPP (1 ,179 ,202 ,224 ),/* GPP_H */ +CNL_GPP (2 ,203 ,215 ,256 ),/* GPP_E */ +CNL_GPP (3 ,216 ,239 ,288 ),/* GPP_F */ +CNL_GPP (4 ,240 ,248 ,INTEL_GPIO_BASE_NOMAP ),/* SPI */ };static const struct intel_padgroup cnlh_community4_gpps[] = { -CNL_GPP (0 ,249 ,259 ,CNL_NO_GPIO ),/* CPU */ -CNL_GPP (1 ,260 ,268 ,CNL_NO_GPIO ),/* JTAG */ -CNL_GPP (2 ,269 ,286 ,320 ),/* GPP_I */ -CNL_GPP (3 ,287 ,298 ,352 ),/* GPP_J */ +CNL_GPP (0 ,249 ,259 ,INTEL_GPIO_BASE_NOMAP ),/* CPU */ +CNL_GPP (1 ,260 ,268 ,INTEL_GPIO_BASE_NOMAP ),/* JTAG */ +CNL_GPP (2 ,269 ,286 ,320 ),/* GPP_I */ +CNL_GPP (3 ,287 ,298 ,352 ),/* GPP_J */ };static const unsigned int cnlh_spi0_pins[] = {40 ,41 ,42 ,43 };
@@ -790,25 +788,25 @@ static const struct intel_function cnllp_functions[] = { };static const struct intel_padgroup cnllp_community0_gpps[] = { -CNL_GPP (0 ,0 ,24 ,0 ),/* GPP_A */ -CNL_GPP (1 ,25 ,50 ,32 ),/* GPP_B */ -CNL_GPP (2 ,51 ,58 ,64 ),/* GPP_G */ -CNL_GPP (3 ,59 ,67 ,CNL_NO_GPIO ),/* SPI */ +CNL_GPP (0 ,0 ,24 ,0 ),/* GPP_A */ +CNL_GPP (1 ,25 ,50 ,32 ),/* GPP_B */ +CNL_GPP (2 ,51 ,58 ,64 ),/* GPP_G */ +CNL_GPP (3 ,59 ,67 ,INTEL_GPIO_BASE_NOMAP ),/* SPI */ };static const struct intel_padgroup cnllp_community1_gpps[] = { -CNL_GPP (0 ,68 ,92 ,96 ),/* GPP_D */ -CNL_GPP (1 ,93 ,116 ,128 ),/* GPP_F */ -CNL_GPP (2 ,117 ,140 ,160 ),/* GPP_H */ -CNL_GPP (3 ,141 ,172 ,192 ),/* vGPIO */ -CNL_GPP (4 ,173 ,180 ,224 ),/* vGPIO */ +CNL_GPP (0 ,68 ,92 ,96 ),/* GPP_D */ +CNL_GPP (1 ,93 ,116 ,128 ),/* GPP_F */ +CNL_GPP (2 ,117 ,140 ,160 ),/* GPP_H */ +CNL_GPP (3 ,141 ,172 ,192 ),/* vGPIO */ +CNL_GPP (4 ,173 ,180 ,224 ),/* vGPIO */ };static const struct intel_padgroup cnllp_community4_gpps[] = { -CNL_GPP (0 ,181 ,204 ,256 ),/* GPP_C */ -CNL_GPP (1 ,205 ,228 ,288 ),/* GPP_E */ -CNL_GPP (2 ,229 ,237 ,CNL_NO_GPIO ),/* JTAG */ -CNL_GPP (3 ,238 ,243 ,CNL_NO_GPIO ),/* HVCMOS */ +CNL_GPP (0 ,181 ,204 ,256 ),/* GPP_C */ +CNL_GPP (1 ,205 ,228 ,288 ),/* GPP_E */ +CNL_GPP (2 ,229 ,237 ,INTEL_GPIO_BASE_NOMAP ),/* JTAG */ +CNL_GPP (3 ,238 ,243 ,INTEL_GPIO_BASE_NOMAP ),/* HVCMOS */ };static const struct intel_community cnllp_communities[] = {
Signature · 1 line
2.25.1
Re: [PATCH v2 2/6] pinctrl: cannonlake: Use generic flag for special GPIO base treatment
Quoted 4 lines · Andy Shevchenko
Since we have a generic flag for special GPIO base treatment, use it in the driver.
Signed-off-by Andy Shevchenko <[email protected]>
PATCH v2 3/6 pinctrl: icelake: Use generic flag for special GPIO base treatment
In reply to Andy ShevchenkoSince we have a generic flag for special GPIO base treatment, use it in the driver.
---
v2: no changes
drivers/pinctrl/intel/pinctrl-icelake.c | 30 ++++++++++++------------- 1 file changed, 14 insertions(+), 16 deletions(-)
drivers/pinctrl/intel/pinctrl-icelake.c +14 -16
@@ -29,8 +29,6 @@ .gpio_base = (g), \ } -#define ICL_NO_GPIO -1 -#define ICL_COMMUNITY (b, s, e, g) \ { \ .barno = (b), \
@@ -305,29 +303,29 @@ static const struct pinctrl_pin_desc icllp_pins[] = { };static const struct intel_padgroup icllp_community0_gpps[] = { -ICL_GPP (0 ,0 ,7 ,0 ),/* GPP_G */ -ICL_GPP (1 ,8 ,33 ,32 ),/* GPP_B */ -ICL_GPP (2 ,34 ,58 ,64 ),/* GPP_A */ +ICL_GPP (0 ,0 ,7 ,0 ),/* GPP_G */ +ICL_GPP (1 ,8 ,33 ,32 ),/* GPP_B */ +ICL_GPP (2 ,34 ,58 ,64 ),/* GPP_A */ };static const struct intel_padgroup icllp_community1_gpps[] = { -ICL_GPP (0 ,59 ,82 ,96 ),/* GPP_H */ -ICL_GPP (1 ,83 ,103 ,128 ),/* GPP_D */ -ICL_GPP (2 ,104 ,123 ,160 ),/* GPP_F */ -ICL_GPP (3 ,124 ,152 ,192 ),/* vGPIO */ +ICL_GPP (0 ,59 ,82 ,96 ),/* GPP_H */ +ICL_GPP (1 ,83 ,103 ,128 ),/* GPP_D */ +ICL_GPP (2 ,104 ,123 ,160 ),/* GPP_F */ +ICL_GPP (3 ,124 ,152 ,192 ),/* vGPIO */ };static const struct intel_padgroup icllp_community4_gpps[] = { -ICL_GPP (0 ,153 ,176 ,224 ),/* GPP_C */ -ICL_GPP (1 ,177 ,182 ,ICL_NO_GPIO ),/* HVCMOS */ -ICL_GPP (2 ,183 ,206 ,256 ),/* GPP_E */ -ICL_GPP (3 ,207 ,215 ,ICL_NO_GPIO ),/* JTAG */ +ICL_GPP (0 ,153 ,176 ,224 ),/* GPP_C */ +ICL_GPP (1 ,177 ,182 ,INTEL_GPIO_BASE_NOMAP ),/* HVCMOS */ +ICL_GPP (2 ,183 ,206 ,256 ),/* GPP_E */ +ICL_GPP (3 ,207 ,215 ,INTEL_GPIO_BASE_NOMAP ),/* JTAG */ };static const struct intel_padgroup icllp_community5_gpps[] = { -ICL_GPP (0 ,216 ,223 ,288 ),/* GPP_R */ -ICL_GPP (1 ,224 ,231 ,320 ),/* GPP_S */ -ICL_GPP (2 ,232 ,240 ,ICL_NO_GPIO ),/* SPI */ +ICL_GPP (0 ,216 ,223 ,288 ),/* GPP_R */ +ICL_GPP (1 ,224 ,231 ,320 ),/* GPP_S */ +ICL_GPP (2 ,232 ,240 ,INTEL_GPIO_BASE_NOMAP ),/* SPI */ };static const struct intel_community icllp_communities[] = {
Signature · 1 line
2.25.1
Re: [PATCH v2 3/6] pinctrl: icelake: Use generic flag for special GPIO base treatment
Quoted 4 lines · Andy Shevchenko
Since we have a generic flag for special GPIO base treatment, use it in the driver.
Signed-off-by Andy Shevchenko <[email protected]>
PATCH v2 4/6 pinctrl: tigerlake: Use generic flag for special GPIO base treatment
In reply to Andy ShevchenkoSince we have a generic flag for special GPIO base treatment, use it in the driver.
---
v2: no changes
drivers/pinctrl/intel/pinctrl-tigerlake.c | 32 +++++++++++------------ 1 file changed, 15 insertions(+), 17 deletions(-)
drivers/pinctrl/intel/pinctrl-tigerlake.c +15 -17
@@ -21,8 +21,6 @@#define TGL_GPI_IS 0x100#define TGL_GPI_IE 0x120 -#define TGL_NO_GPIO -1 -#define TGL_GPP (r, s, e, g) \ { \ .reg_num = (r), \
@@ -342,30 +340,30 @@ static const struct pinctrl_pin_desc tgllp_pins[] = { };static const struct intel_padgroup tgllp_community0_gpps[] = { -TGL_GPP (0 ,0 ,25 ,0 ),/* GPP_B */ -TGL_GPP (1 ,26 ,41 ,32 ),/* GPP_T */ -TGL_GPP (2 ,42 ,66 ,64 ),/* GPP_A */ +TGL_GPP (0 ,0 ,25 ,0 ),/* GPP_B */ +TGL_GPP (1 ,26 ,41 ,32 ),/* GPP_T */ +TGL_GPP (2 ,42 ,66 ,64 ),/* GPP_A */ };static const struct intel_padgroup tgllp_community1_gpps[] = { -TGL_GPP (0 ,67 ,74 ,96 ),/* GPP_S */ -TGL_GPP (1 ,75 ,98 ,128 ),/* GPP_H */ -TGL_GPP (2 ,99 ,119 ,160 ),/* GPP_D */ -TGL_GPP (3 ,120 ,143 ,192 ),/* GPP_U */ -TGL_GPP (4 ,144 ,170 ,224 ),/* vGPIO */ +TGL_GPP (0 ,67 ,74 ,96 ),/* GPP_S */ +TGL_GPP (1 ,75 ,98 ,128 ),/* GPP_H */ +TGL_GPP (2 ,99 ,119 ,160 ),/* GPP_D */ +TGL_GPP (3 ,120 ,143 ,192 ),/* GPP_U */ +TGL_GPP (4 ,144 ,170 ,224 ),/* vGPIO */ };static const struct intel_padgroup tgllp_community4_gpps[] = { -TGL_GPP (0 ,171 ,194 ,256 ),/* GPP_C */ -TGL_GPP (1 ,195 ,219 ,288 ),/* GPP_F */ -TGL_GPP (2 ,220 ,225 ,TGL_NO_GPIO ),/* HVCMOS */ -TGL_GPP (3 ,226 ,250 ,320 ),/* GPP_E */ -TGL_GPP (4 ,251 ,259 ,TGL_NO_GPIO ),/* JTAG */ +TGL_GPP (0 ,171 ,194 ,256 ),/* GPP_C */ +TGL_GPP (1 ,195 ,219 ,288 ),/* GPP_F */ +TGL_GPP (2 ,220 ,225 ,INTEL_GPIO_BASE_NOMAP ),/* HVCMOS */ +TGL_GPP (3 ,226 ,250 ,320 ),/* GPP_E */ +TGL_GPP (4 ,251 ,259 ,INTEL_GPIO_BASE_NOMAP ),/* JTAG */ };static const struct intel_padgroup tgllp_community5_gpps[] = { -TGL_GPP (0 ,260 ,267 ,352 ),/* GPP_R */ -TGL_GPP (1 ,268 ,276 ,TGL_NO_GPIO ),/* SPI */ +TGL_GPP (0 ,260 ,267 ,352 ),/* GPP_R */ +TGL_GPP (1 ,268 ,276 ,INTEL_GPIO_BASE_NOMAP ),/* SPI */ };static const struct intel_community tgllp_communities[] = {
Signature · 1 line
2.25.1
Re: [PATCH v2 4/6] pinctrl: tigerlake: Use generic flag for special GPIO base treatment
Quoted 4 lines · Andy Shevchenko
Since we have a generic flag for special GPIO base treatment, use it in the driver.
Signed-off-by Andy Shevchenko <[email protected]>
PATCH v2 5/6 pinctrl: intel: Introduce new flag to force GPIO base to be 0
In reply to Andy ShevchenkoIn some cases not the first group would like to have GPIO base to be 0. It's not possible right now due to 0 has special meaning already. Thus, introduce a new flag to allow drivers to force GPIO base to be 0 on a certain group. It's assumed that it can be only one group per device with such flag enabled.
---
v2: new patch
drivers/pinctrl/intel/pinctrl-intel.c | 3 +++ drivers/pinctrl/intel/pinctrl-intel.h | 2 ++ 2 files changed, 5 insertions(+)
drivers/pinctrl/intel/pinctrl-intel.c +3 -0
@@ -1281,6 +1281,9 @@ static int intel_pinctrl_add_padgroups(struct intel_pinctrl *pctrl,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 ;
drivers/pinctrl/intel/pinctrl-intel.h +2 -0
@@ -70,10 +70,12 @@ struct intel_padgroup {/** * 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 , };
Signature · 1 line
2.25.1
Re: [PATCH v2 5/6] pinctrl: intel: Introduce new flag to force GPIO base to be 0
Quoted 7 lines · Andy Shevchenko
In some cases not the first group would like to have GPIO base to be 0. It's not possible right now due to 0 has special meaning already. Thus, introduce a new flag to allow drivers to force GPIO base to be 0 on a certain group. It's assumed that it can be only one group per device with such flag enabled.
Signed-off-by Andy Shevchenko <[email protected]>
PATCH v2 6/6 pinctrl: intel: Add Intel Jasper Lake pin controller support
In reply to Andy ShevchenkoThis driver adds pinctrl/GPIO support for Intel Jasper Lake SoC. The GPIO controller is based on the next generation GPIO hardware but still compatible with the one supported by the Intel core pinctrl/GPIO driver.
---
v2: new patch
drivers/pinctrl/intel/Kconfig | 8 + drivers/pinctrl/intel/Makefile | 1 + drivers/pinctrl/intel/pinctrl-jasperlake.c | 344 +++++++++++++++++++++ 3 files changed, 353 insertions(+) create mode 100644 drivers/pinctrl/intel/pinctrl-jasperlake.c
drivers/pinctrl/intel/Kconfig +8 -0
@@ -111,6 +111,14 @@ config PINCTRL_ICELAKE This pinctrl driver provides an interface that allows configuring 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 tristate "Intel Lewisburg pinctrl and GPIO driver" depends on ACPI
drivers/pinctrl/intel/Makefile +1 -0
@@ -12,6 +12,7 @@ obj-$(CONFIG_PINCTRL_CEDARFORK) += pinctrl-cedarfork.o obj-$(CONFIG_PINCTRL_DENVERTON) += pinctrl-denverton.o obj-$(CONFIG_PINCTRL_GEMINILAKE) += pinctrl-geminilake.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_SUNRISEPOINT) += pinctrl-sunrisepoint.o obj-$(CONFIG_PINCTRL_TIGERLAKE) += pinctrl-tigerlake.o
drivers/pinctrl/intel/pinctrl-jasperlake.c new file +344 -0
344 lines not on this page · raw message
Signature · 1 line
2.25.1
Re: [PATCH v2 6/6] pinctrl: intel: Add Intel Jasper Lake pin controller support
Quoted 5 lines · Andy Shevchenko
This driver adds pinctrl/GPIO support for Intel Jasper Lake SoC. The GPIO controller is based on the next generation GPIO hardware but still compatible with the one supported by the Intel core pinctrl/GPIO driver.
Cc Mika Westerberg <[email protected]>
Re: [PATCH v2 6/6] pinctrl: intel: Add Intel Jasper Lake pin controller support
Quoted 8 lines · Mika Westerberg
Quoted 5 lines · Andy Shevchenko
This driver adds pinctrl/GPIO support for Intel Jasper Lake SoC. The GPIO controller is based on the next generation GPIO hardware but still compatible with the one supported by the Intel core pinctrl/GPIO driver.
Cc Mika Westerberg <[email protected]>Acked-by Mika Westerberg <[email protected]>
All 6 has been pushed to my review and testing queue, thanks!
Signature · 2 lines
With Best Regards, Andy Shevchenko
Quoted 6 lines · Andy Shevchenko
Few drivers are using the same flag to tell Intel pin control core how to interpret GPIO base.
Provide a generic flags so all drivers can use.
Signed-off-by Andy Shevchenko <[email protected]>