Re: [PATCH v9 6/6] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system
On Tue, Nov 08, 2016 at 04:57:23PM +0800, Tan Jui Nee wrote: > This driver uses the P2SB hide/unhide mechanism cooperatively > to pass the PCI BAR address to the gpio platform driver. > > Signed-off-by: Tan Jui NeeReviewed-by: Mika Westerberg
Re: [PATCH v9 6/6] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system
On Tue, Nov 08, 2016 at 04:57:23PM +0800, Tan Jui Nee wrote: > This driver uses the P2SB hide/unhide mechanism cooperatively > to pass the PCI BAR address to the gpio platform driver. > > Signed-off-by: Tan Jui Nee Reviewed-by: Mika Westerberg
[PATCH v9 6/6] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system
This driver uses the P2SB hide/unhide mechanism cooperatively to pass the PCI BAR address to the gpio platform driver. Signed-off-by: Tan Jui Nee--- Changes in V9: - No change Changes in V8: - Rename source file lpc_ich-apl.c to lpc_ich_apl.c (suggested by Mika). Changes in V7: - Add author information and rewrite description of source file lpc_ich-apl.c and lpc_ich_apl.h. - Sort the header files by alphabetical order in lpc_ich-apl.c. - Rename header file lpc_ich-apl.h to lpc_ich_apl.h (suggested by Lee). - Remove unneeded pdata_size and platform_data from mfd_cell. Also, remove unneeded apl_pinctrl_pdata. - Since variable apl_p2sb is only used once, hence switch it out for the PCI_DEVFN macro (suggested by Lee). - Define APL_GPIO_COMMUNITY_MAX as total Apollo Lake GPIO communities supported. - Set resources in mfd_cell for each GPIO community. - Call p2sb_bar() function once instead of four times inside the for loop. And make p2sb_bar() function just to fill in the base address into a scratch "struct resource" and have the loop do the additions to base/end. - Remove entire apl_pinctrl_pdata.name memory allocation since it is no longer needed. - Return ret at the end of lpc_ich_add_gpio() function. Changes in V6: - Rename CONFIG_X86_INTEL_APL to CONFIG_X86_INTEL_IVI so that it relates to the actual product, as suggested by Mika. - Rework Makefile according Andy's comments. - Rename lpc_ich_misc() to lpc_ich_add_gpio() so that the name should not be so generic, as suggested by Andy. - Call lpc_ich_add_gpio() via priv->chipset. - lpc_ich_add_gpio() function will be moved from .../include/linux/mfd/lpc_ich.h to .../drivers/mfd/lpc_ich-apl.h as this is a part of internal driver interface as suggested by Andy. - Move enum lpc_chipsets from .../drivers/mfd/lpc_ich-core.c to .../include/linux/mfd/lpc_ich.h as lpc_chipsets is also accessed by lpc_ich_add_gpio(). - Check if kasprintf return value for all 4 gpio controllers before proceed to add platform device by using mfd_add_devices(). Changes in V5: - Split lpc-ich driver into two parts (lpc_ich-core and lpc_ich-apl). The file lpc_ich-apl.c introduces gpio platform driver in MFD. - Rename Kconfig option CONFIG_X86_INTEL_NON_ACPI to CONFIG_X86_INTEL_APL so that it reflects actual product as suggested by Mika. Changes in V4: - Move Kconfig option CONFIG_X86_INTEL_NON_ACPI from [PATCH 2/3] x86/platform/p2sb: New Primary to Sideband bridge support driver for Intel SOC's to [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system since the config is used in latter patch. - Select CONFIG_P2SB when CONFIG_LPC_ICH is enabled. - Remove #ifdef CONFIG_X86_INTEL_NON_ACPI and use #if defined(CONFIG_X86_INTEL_NON_ACPI) when lpc_ich_misc is called as suggested by Lee Jones. - Use single dimensional array instead of 2D array for apl_gpio_io_res structure and use DEFINE_RES_IRQ for its IRQ resource. Changes in V3: - Simplify register addresses calculation and use DEFINE_RES_MEM_NAMED defines for apl_gpio_io_res structure - Define magic number for P2SB PCI ID - Replace switch-case with if-else since currently we have only one use case - Only call mfd_add_devices() once for all gpio communities Changes in V2: - Add new config option CONFIG_X86_INTEL_NON_ACPI and "select PINCTRL" to fix kbuildbot error drivers/mfd/Kconfig| 2 + drivers/mfd/Makefile | 4 ++ drivers/mfd/lpc_ich_apl.c | 120 + drivers/mfd/lpc_ich_apl.h | 29 +++ drivers/mfd/lpc_ich_core.c | 5 ++ 5 files changed, 160 insertions(+) create mode 100644 drivers/mfd/lpc_ich_apl.c create mode 100644 drivers/mfd/lpc_ich_apl.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index c6df644..7bb2f7c 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -391,7 +391,9 @@ config MFD_INTEL_QUARK_I2C_GPIO config LPC_ICH tristate "Intel ICH LPC" depends on PCI + depends on X86 && PCI select MFD_CORE + select P2SB help The LPC bridge function of the Intel ICH provides support for many functional units. This driver provides needed support for diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 06a91ea..ccafdfa 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -161,6 +161,10 @@ obj-$(CONFIG_MFD_INTEL_QUARK_I2C_GPIO) += intel_quark_i2c_gpio.o obj-$(CONFIG_LPC_SCH)
[PATCH v9 6/6] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system
This driver uses the P2SB hide/unhide mechanism cooperatively to pass the PCI BAR address to the gpio platform driver. Signed-off-by: Tan Jui Nee --- Changes in V9: - No change Changes in V8: - Rename source file lpc_ich-apl.c to lpc_ich_apl.c (suggested by Mika). Changes in V7: - Add author information and rewrite description of source file lpc_ich-apl.c and lpc_ich_apl.h. - Sort the header files by alphabetical order in lpc_ich-apl.c. - Rename header file lpc_ich-apl.h to lpc_ich_apl.h (suggested by Lee). - Remove unneeded pdata_size and platform_data from mfd_cell. Also, remove unneeded apl_pinctrl_pdata. - Since variable apl_p2sb is only used once, hence switch it out for the PCI_DEVFN macro (suggested by Lee). - Define APL_GPIO_COMMUNITY_MAX as total Apollo Lake GPIO communities supported. - Set resources in mfd_cell for each GPIO community. - Call p2sb_bar() function once instead of four times inside the for loop. And make p2sb_bar() function just to fill in the base address into a scratch "struct resource" and have the loop do the additions to base/end. - Remove entire apl_pinctrl_pdata.name memory allocation since it is no longer needed. - Return ret at the end of lpc_ich_add_gpio() function. Changes in V6: - Rename CONFIG_X86_INTEL_APL to CONFIG_X86_INTEL_IVI so that it relates to the actual product, as suggested by Mika. - Rework Makefile according Andy's comments. - Rename lpc_ich_misc() to lpc_ich_add_gpio() so that the name should not be so generic, as suggested by Andy. - Call lpc_ich_add_gpio() via priv->chipset. - lpc_ich_add_gpio() function will be moved from .../include/linux/mfd/lpc_ich.h to .../drivers/mfd/lpc_ich-apl.h as this is a part of internal driver interface as suggested by Andy. - Move enum lpc_chipsets from .../drivers/mfd/lpc_ich-core.c to .../include/linux/mfd/lpc_ich.h as lpc_chipsets is also accessed by lpc_ich_add_gpio(). - Check if kasprintf return value for all 4 gpio controllers before proceed to add platform device by using mfd_add_devices(). Changes in V5: - Split lpc-ich driver into two parts (lpc_ich-core and lpc_ich-apl). The file lpc_ich-apl.c introduces gpio platform driver in MFD. - Rename Kconfig option CONFIG_X86_INTEL_NON_ACPI to CONFIG_X86_INTEL_APL so that it reflects actual product as suggested by Mika. Changes in V4: - Move Kconfig option CONFIG_X86_INTEL_NON_ACPI from [PATCH 2/3] x86/platform/p2sb: New Primary to Sideband bridge support driver for Intel SOC's to [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system since the config is used in latter patch. - Select CONFIG_P2SB when CONFIG_LPC_ICH is enabled. - Remove #ifdef CONFIG_X86_INTEL_NON_ACPI and use #if defined(CONFIG_X86_INTEL_NON_ACPI) when lpc_ich_misc is called as suggested by Lee Jones. - Use single dimensional array instead of 2D array for apl_gpio_io_res structure and use DEFINE_RES_IRQ for its IRQ resource. Changes in V3: - Simplify register addresses calculation and use DEFINE_RES_MEM_NAMED defines for apl_gpio_io_res structure - Define magic number for P2SB PCI ID - Replace switch-case with if-else since currently we have only one use case - Only call mfd_add_devices() once for all gpio communities Changes in V2: - Add new config option CONFIG_X86_INTEL_NON_ACPI and "select PINCTRL" to fix kbuildbot error drivers/mfd/Kconfig| 2 + drivers/mfd/Makefile | 4 ++ drivers/mfd/lpc_ich_apl.c | 120 + drivers/mfd/lpc_ich_apl.h | 29 +++ drivers/mfd/lpc_ich_core.c | 5 ++ 5 files changed, 160 insertions(+) create mode 100644 drivers/mfd/lpc_ich_apl.c create mode 100644 drivers/mfd/lpc_ich_apl.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index c6df644..7bb2f7c 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -391,7 +391,9 @@ config MFD_INTEL_QUARK_I2C_GPIO config LPC_ICH tristate "Intel ICH LPC" depends on PCI + depends on X86 && PCI select MFD_CORE + select P2SB help The LPC bridge function of the Intel ICH provides support for many functional units. This driver provides needed support for diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 06a91ea..ccafdfa 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -161,6 +161,10 @@ obj-$(CONFIG_MFD_INTEL_QUARK_I2C_GPIO) += intel_quark_i2c_gpio.o obj-$(CONFIG_LPC_SCH) += lpc_sch.o