On Wed, Apr 19, 2017 at 3:07 PM, Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > The intel_pmic_xpower code provides an OPRegion handler, which must be > available before other drivers using it are loaded, which can only be > ensured if both the mfd and opregion drivers are built in, which is why > the Kconfig option for intel_pmic_xpower is a bool. > > The use of IIO is causing trouble for generic distro configs here as > distros will typically want to build IIO drivers as modules and there > really is no reason to use IIO here. The reading of the ADC value is a > single regmap_bulk_read, which is already protected against races by > the regmap-lock. > > This commit removes the use of IIO, allowing distros to enable the > driver without needing to built IIO in and also actually simplifies > the code. > > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Andy, Srinivas, any concerns? > --- > drivers/acpi/Kconfig | 2 +- > drivers/acpi/pmic/intel_pmic_xpower.c | 21 ++++----------------- > 2 files changed, 5 insertions(+), 18 deletions(-) > > diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig > index 4f12fe0..842530f 100644 > --- a/drivers/acpi/Kconfig > +++ b/drivers/acpi/Kconfig > @@ -506,7 +506,7 @@ config CRC_PMIC_OPREGION > > config XPOWER_PMIC_OPREGION > bool "ACPI operation region support for XPower AXP288 PMIC" > - depends on AXP288_ADC = y > + depends on MFD_AXP20X_I2C > help > This config adds ACPI operation region support for XPower AXP288 PMIC. > > diff --git a/drivers/acpi/pmic/intel_pmic_xpower.c b/drivers/acpi/pmic/intel_pmic_xpower.c > index e6e991a..55f5111 100644 > --- a/drivers/acpi/pmic/intel_pmic_xpower.c > +++ b/drivers/acpi/pmic/intel_pmic_xpower.c > @@ -18,7 +18,6 @@ > #include <linux/mfd/axp20x.h> > #include <linux/regmap.h> > #include <linux/platform_device.h> > -#include <linux/iio/consumer.h> > #include "intel_pmic.h" > > #define XPOWER_GPADC_LOW 0x5b > @@ -186,28 +185,16 @@ static int intel_xpower_pmic_update_power(struct regmap *regmap, int reg, > * @regmap: regmap of the PMIC device > * @reg: register to get the reading > * > - * We could get the sensor value by manipulating the HW regs here, but since > - * the axp288 IIO driver may also access the same regs at the same time, the > - * APIs provided by IIO subsystem are used here instead to avoid problems. As > - * a result, the two passed in params are of no actual use. > - * > * Return a positive value on success, errno on failure. > */ > static int intel_xpower_pmic_get_raw_temp(struct regmap *regmap, int reg) > { > - struct iio_channel *gpadc_chan; > - int ret, val; > - > - gpadc_chan = iio_channel_get(NULL, "axp288-system-temp"); > - if (IS_ERR_OR_NULL(gpadc_chan)) > - return -EACCES; > + u8 buf[2]; > > - ret = iio_read_channel_raw(gpadc_chan, &val); > - if (ret < 0) > - val = ret; > + if (regmap_bulk_read(regmap, AXP288_GP_ADC_H, buf, 2)) > + return -EIO; > > - iio_channel_release(gpadc_chan); > - return val; > + return (buf[0] << 4) + ((buf[1] >> 4) & 0x0F); > } > > static struct intel_pmic_opregion_data intel_xpower_pmic_opregion_data = { > -- > 2.9.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html