Message ID | 1426177893-17945-2-git-send-email-shobhit.kumar@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Mar 12, 2015 at 10:01:25PM +0530, Shobhit Kumar wrote: > On some Intel SoC platforms, the panel enable/disable signals are > controlled by CRC PMIC. Add those control as a new GPIO in a lookup > table for gpio-crystalcove chip during CRC driver load > > CC: Samuel Ortiz <sameo@linux.intel.com> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: Alexandre Courbot <gnurou@gmail.com> > Cc: Thierry Reding <thierry.reding@gmail.com> > Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com> > --- > drivers/mfd/intel_soc_pmic_core.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/mfd/intel_soc_pmic_core.c b/drivers/mfd/intel_soc_pmic_core.c > index 80cef04..365d5de 100644 > --- a/drivers/mfd/intel_soc_pmic_core.c > +++ b/drivers/mfd/intel_soc_pmic_core.c > @@ -24,8 +24,19 @@ > #include <linux/acpi.h> > #include <linux/regmap.h> > #include <linux/mfd/intel_soc_pmic.h> > +#include <linux/gpio/machine.h> > #include "intel_soc_pmic_core.h" > > +/* Lookup table for the Panel Enable/Disable line as GPIO signals */ > +struct gpiod_lookup_table panel_gpio_table = { Should this be static? > + /* Intel GFX is consumer */ > + .dev_id = "0000:00:02.0", > + .table = { > + /* Panel EN/DISABLE */ > + GPIO_LOOKUP("gpio_crystalcove", 94, "panel", GPIO_ACTIVE_HIGH), > + }, > +}; > + > /* > * On some boards the PMIC interrupt may come from a GPIO line. > * Try to lookup the ACPI table and see if such connection exists. If not, > @@ -85,6 +96,9 @@ static int intel_soc_pmic_i2c_probe(struct i2c_client *i2c, > if (ret) > dev_warn(dev, "Can't enable IRQ as wake source: %d\n", ret); > > + /* Add lookup table binding for Panel Control to the GPIO Chip */ > + gpiod_add_lookup_table(&panel_gpio_table); > + There's no corresponding gpiod_remove_lookup_table() call anywhere. That is understandable, given that that function doesn't exist. However, this driver can be unloaded (or at least unbound from the device), at which point the data effectively becomes stale. This shouldn't pose much of a problem because the driver can't be built as a module, so the data will stick around. However, what happens if you unload and then reload the driver? You'll be adding a second instance of the GPIO table. Given that the data is identical maybe that isn't even a problem. Then again, it's probably going to mess up the global list because you're adding the same entry twice. So I think that's something we need to fix. The same is true for the PWM lookup table in a later patch. Thierry
On Thu, Mar 12, 2015 at 5:31 PM, Shobhit Kumar <shobhit.kumar@intel.com> wrote: > On some Intel SoC platforms, the panel enable/disable signals are > controlled by CRC PMIC. Add those control as a new GPIO in a lookup > table for gpio-crystalcove chip during CRC driver load > > CC: Samuel Ortiz <sameo@linux.intel.com> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: Alexandre Courbot <gnurou@gmail.com> > Cc: Thierry Reding <thierry.reding@gmail.com> > Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com> So as I think it is better to use a fixed voltage regulator (see code example in the i915 patch) I think this should register a regulator lookup instead. Yours, Linus Walleij
On Thu, Mar 12, 2015 at 5:31 PM, Shobhit Kumar <shobhit.kumar@intel.com> wrote: > On some Intel SoC platforms, the panel enable/disable signals are > controlled by CRC PMIC. Add those control as a new GPIO in a lookup > table for gpio-crystalcove chip during CRC driver load > > CC: Samuel Ortiz <sameo@linux.intel.com> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: Alexandre Courbot <gnurou@gmail.com> > Cc: Thierry Reding <thierry.reding@gmail.com> > Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com> I have changed my mind. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Lee, please apply this. Yours, Linus Walleij
diff --git a/drivers/mfd/intel_soc_pmic_core.c b/drivers/mfd/intel_soc_pmic_core.c index 80cef04..365d5de 100644 --- a/drivers/mfd/intel_soc_pmic_core.c +++ b/drivers/mfd/intel_soc_pmic_core.c @@ -24,8 +24,19 @@ #include <linux/acpi.h> #include <linux/regmap.h> #include <linux/mfd/intel_soc_pmic.h> +#include <linux/gpio/machine.h> #include "intel_soc_pmic_core.h" +/* Lookup table for the Panel Enable/Disable line as GPIO signals */ +struct gpiod_lookup_table panel_gpio_table = { + /* Intel GFX is consumer */ + .dev_id = "0000:00:02.0", + .table = { + /* Panel EN/DISABLE */ + GPIO_LOOKUP("gpio_crystalcove", 94, "panel", GPIO_ACTIVE_HIGH), + }, +}; + /* * On some boards the PMIC interrupt may come from a GPIO line. * Try to lookup the ACPI table and see if such connection exists. If not, @@ -85,6 +96,9 @@ static int intel_soc_pmic_i2c_probe(struct i2c_client *i2c, if (ret) dev_warn(dev, "Can't enable IRQ as wake source: %d\n", ret); + /* Add lookup table binding for Panel Control to the GPIO Chip */ + gpiod_add_lookup_table(&panel_gpio_table); + ret = mfd_add_devices(dev, -1, config->cell_dev, config->n_cell_devs, NULL, 0, regmap_irq_get_domain(pmic->irq_chip_data));
On some Intel SoC platforms, the panel enable/disable signals are controlled by CRC PMIC. Add those control as a new GPIO in a lookup table for gpio-crystalcove chip during CRC driver load CC: Samuel Ortiz <sameo@linux.intel.com> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Alexandre Courbot <gnurou@gmail.com> Cc: Thierry Reding <thierry.reding@gmail.com> Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com> --- drivers/mfd/intel_soc_pmic_core.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)