diff for duplicates of <20160129090632.GS3368@x1> diff --git a/a/1.txt b/N1/1.txt index 510024c..9e8de8a 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -3,46 +3,49 @@ On Thu, 28 Jan 2016, Laxman Dewangan wrote: > MAX77620/MAX20024 are Power Management IC from the MAXIM. > It supports RTC, multiple GPIOs, multiple DCDC and LDOs, > watchdog, clock etc. -> +>=20 > Add MFD drier to provides common support for accessing the > device; additional drivers is developed on respected subsystem > in order to use the functionality of the device. -> +>=20 > Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> > Signed-off-by: Chaitanya Bandi <bandik@nvidia.com> > Signed-off-by: Mallikarjun Kasoju <mkasoju@nvidia.com> > Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > --- > Changes from V1: -> - Code cleanups per review from V1. +> - Code cleanups per review from V1.=20 > - Move register acccess APIs from header to c file. -> - Remove some of non required variable, remove duplication in error message +> - Remove some of non required variable, remove duplication in error messa= +ge > and simplify some of function implementation. -> - Register RTC driver such that it can get the regmap handle form parent device -> +> - Register RTC driver such that it can get the regmap handle form parent = +device +>=20 > Changes from V2: > - Run coccicheck and checkpatch in strict mode for the alignment. > - Drop RTC driver and its i2c client registration. -> -> Changes from V3: -> - Change all sys initcall to module driver. +>=20 +> Changes from V3: =20 +> - Change all sys initcall to module driver. =20 > - change the max77620_read argument to unisgned int from u8. -> -> Changes from V4: +>=20 +> Changes from V4: =20 > - Take care of fps nodes. > - Drop the battery charger and low battery binding and related code as > it need to go on power driver. -> Changes from V5: +> Changes from V5: =20 > -None -> +>=20 > drivers/mfd/Kconfig | 15 + > drivers/mfd/Makefile | 1 + -> drivers/mfd/max77620.c | 727 +++++++++++++++++++++++++++++++++++++++++++ +> drivers/mfd/max77620.c | 727 +++++++++++++++++++++++++++++++++++++= +++++++ > include/linux/mfd/max77620.h | 406 ++++++++++++++++++++++++ > 4 files changed, 1149 insertions(+) > create mode 100644 drivers/mfd/max77620.c > create mode 100644 include/linux/mfd/max77620.h -> +>=20 > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 9ca66de..e5ad974 100644 > --- a/drivers/mfd/Kconfig @@ -50,10 +53,10 @@ On Thu, 28 Jan 2016, Laxman Dewangan wrote: > @@ -492,6 +492,21 @@ config MFD_MAX14577 > additional drivers must be enabled in order to use the functionality > of the device. -> +> =20 > +config MFD_MAX77620 > + bool "Maxim Semiconductor MAX77620 and MAX20024 PMIC Support" -> + depends on I2C=y +> + depends on I2C=3Dy > + depends on OF > + select MFD_CORE > + select REGMAP_I2C @@ -68,19 +71,19 @@ On Thu, 28 Jan 2016, Laxman Dewangan wrote: > + > config MFD_MAX77686 > bool "Maxim Semiconductor MAX77686/802 PMIC Support" -> depends on I2C=y +> depends on I2C=3Dy > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > index 0f230a6..97910ed 100644 > --- a/drivers/mfd/Makefile > +++ b/drivers/mfd/Makefile -> @@ -123,6 +123,7 @@ obj-$(CONFIG_MFD_DA9063) += da9063.o -> obj-$(CONFIG_MFD_DA9150) += da9150-core.o -> -> obj-$(CONFIG_MFD_MAX14577) += max14577.o -> +obj-$(CONFIG_MFD_MAX77620) += max77620.o -> obj-$(CONFIG_MFD_MAX77686) += max77686.o -> obj-$(CONFIG_MFD_MAX77693) += max77693.o -> obj-$(CONFIG_MFD_MAX77843) += max77843.o +> @@ -123,6 +123,7 @@ obj-$(CONFIG_MFD_DA9063) +=3D da9063.o +> obj-$(CONFIG_MFD_DA9150) +=3D da9150-core.o +> =20 +> obj-$(CONFIG_MFD_MAX14577) +=3D max14577.o +> +obj-$(CONFIG_MFD_MAX77620) +=3D max77620.o +> obj-$(CONFIG_MFD_MAX77686) +=3D max77686.o +> obj-$(CONFIG_MFD_MAX77693) +=3D max77693.o +> obj-$(CONFIG_MFD_MAX77843) +=3D max77843.o > diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c > new file mode 100644 > index 0000000..49318c3 @@ -97,13 +100,16 @@ On Thu, 28 Jan 2016, Laxman Dewangan wrote: > + * Chaitanya Bandi <bandik@nvidia.com> > + * Mallikarjun Kasoju <mkasoju@nvidia.com> > + * -> + * This program is free software; you can redistribute it and/or modify it +> + * This program is free software; you can redistribute it and/or modify = +it > + * under the terms and conditions of the GNU General Public License, > + * version 2, as published by the Free Software Foundation. > + * -> + * This program is distributed in the hope it will be useful, but WITHOUT +> + * This program is distributed in the hope it will be useful, but WITHOU= +T > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License= + for > + * more details. > + */ @@ -121,7 +127,7 @@ Can you use the shorter version? Alphabetical. -> +static const char *of_max77620_fps_node_name[MAX77620_FPS_COUNT] = { +> +static const char *of_max77620_fps_node_name[MAX77620_FPS_COUNT] =3D { > + "fps0", > + "fps1", > + "fps2" @@ -129,86 +135,86 @@ Alphabetical. No need for this arrray. Just use '"fps%d", i' in the for loop below. -> +static struct resource gpio_resources[] = { +> +static struct resource gpio_resources[] =3D { > + { -> + .start = MAX77620_IRQ_TOP_GPIO, -> + .end = MAX77620_IRQ_TOP_GPIO, -> + .flags = IORESOURCE_IRQ, +> + .start =3D MAX77620_IRQ_TOP_GPIO, +> + .end =3D MAX77620_IRQ_TOP_GPIO, +> + .flags =3D IORESOURCE_IRQ, > + } > +}; > + -> +static struct resource power_resources[] = { +> +static struct resource power_resources[] =3D { > + { -> + .start = MAX77620_IRQ_LBT_MBATLOW, -> + .end = MAX77620_IRQ_LBT_MBATLOW, -> + .flags = IORESOURCE_IRQ, +> + .start =3D MAX77620_IRQ_LBT_MBATLOW, +> + .end =3D MAX77620_IRQ_LBT_MBATLOW, +> + .flags =3D IORESOURCE_IRQ, > + } > +}; > + -> +static struct resource rtc_resources[] = { +> +static struct resource rtc_resources[] =3D { > + { -> + .start = MAX77620_IRQ_TOP_RTC, -> + .end = MAX77620_IRQ_TOP_RTC, -> + .flags = IORESOURCE_IRQ, +> + .start =3D MAX77620_IRQ_TOP_RTC, +> + .end =3D MAX77620_IRQ_TOP_RTC, +> + .flags =3D IORESOURCE_IRQ, > + } > +}; > + -> +static struct resource thermal_resources[] = { +> +static struct resource thermal_resources[] =3D { > + { -> + .start = MAX77620_IRQ_LBT_TJALRM1, -> + .end = MAX77620_IRQ_LBT_TJALRM1, -> + .flags = IORESOURCE_IRQ, +> + .start =3D MAX77620_IRQ_LBT_TJALRM1, +> + .end =3D MAX77620_IRQ_LBT_TJALRM1, +> + .flags =3D IORESOURCE_IRQ, > + }, > + { -> + .start = MAX77620_IRQ_LBT_TJALRM2, -> + .end = MAX77620_IRQ_LBT_TJALRM2, -> + .flags = IORESOURCE_IRQ, +> + .start =3D MAX77620_IRQ_LBT_TJALRM2, +> + .end =3D MAX77620_IRQ_LBT_TJALRM2, +> + .flags =3D IORESOURCE_IRQ, > + } > +}; Simplify all of these by using the DEFINE_RES_* defines. -> +static const struct regmap_irq max77620_top_irqs[] = { -> + [MAX77620_IRQ_TOP_GLBL] = { -> + .mask = MAX77620_IRQ_TOP_GLBL_MASK, -> + .reg_offset = 0, +> +static const struct regmap_irq max77620_top_irqs[] =3D { +> + [MAX77620_IRQ_TOP_GLBL] =3D { +> + .mask =3D MAX77620_IRQ_TOP_GLBL_MASK, +> + .reg_offset =3D 0, > + }, -> + [MAX77620_IRQ_TOP_SD] = { -> + .mask = MAX77620_IRQ_TOP_SD_MASK, -> + .reg_offset = 0, +> + [MAX77620_IRQ_TOP_SD] =3D { +> + .mask =3D MAX77620_IRQ_TOP_SD_MASK, +> + .reg_offset =3D 0, > + }, -> + [MAX77620_IRQ_TOP_LDO] = { -> + .mask = MAX77620_IRQ_TOP_LDO_MASK, -> + .reg_offset = 0, +> + [MAX77620_IRQ_TOP_LDO] =3D { +> + .mask =3D MAX77620_IRQ_TOP_LDO_MASK, +> + .reg_offset =3D 0, > + }, -> + [MAX77620_IRQ_TOP_GPIO] = { -> + .mask = MAX77620_IRQ_TOP_GPIO_MASK, -> + .reg_offset = 0, +> + [MAX77620_IRQ_TOP_GPIO] =3D { +> + .mask =3D MAX77620_IRQ_TOP_GPIO_MASK, +> + .reg_offset =3D 0, > + }, -> + [MAX77620_IRQ_TOP_RTC] = { -> + .mask = MAX77620_IRQ_TOP_RTC_MASK, -> + .reg_offset = 0, +> + [MAX77620_IRQ_TOP_RTC] =3D { +> + .mask =3D MAX77620_IRQ_TOP_RTC_MASK, +> + .reg_offset =3D 0, > + }, -> + [MAX77620_IRQ_TOP_32K] = { -> + .mask = MAX77620_IRQ_TOP_32K_MASK, -> + .reg_offset = 0, +> + [MAX77620_IRQ_TOP_32K] =3D { +> + .mask =3D MAX77620_IRQ_TOP_32K_MASK, +> + .reg_offset =3D 0, > + }, -> + [MAX77620_IRQ_TOP_ONOFF] = { -> + .mask = MAX77620_IRQ_TOP_ONOFF_MASK, -> + .reg_offset = 0, +> + [MAX77620_IRQ_TOP_ONOFF] =3D { +> + .mask =3D MAX77620_IRQ_TOP_ONOFF_MASK, +> + .reg_offset =3D 0, > + }, > + -> + [MAX77620_IRQ_LBT_MBATLOW] = { -> + .mask = MAX77620_IRQ_LBM_MASK, -> + .reg_offset = 1, +> + [MAX77620_IRQ_LBT_MBATLOW] =3D { +> + .mask =3D MAX77620_IRQ_LBM_MASK, +> + .reg_offset =3D 1, > + }, -> + [MAX77620_IRQ_LBT_TJALRM1] = { -> + .mask = MAX77620_IRQ_TJALRM1_MASK, -> + .reg_offset = 1, +> + [MAX77620_IRQ_LBT_TJALRM1] =3D { +> + .mask =3D MAX77620_IRQ_TJALRM1_MASK, +> + .reg_offset =3D 1, > + }, -> + [MAX77620_IRQ_LBT_TJALRM2] = { -> + .mask = MAX77620_IRQ_TJALRM2_MASK, -> + .reg_offset = 1, +> + [MAX77620_IRQ_LBT_TJALRM2] =3D { +> + .mask =3D MAX77620_IRQ_TJALRM2_MASK, +> + .reg_offset =3D 1, > + }, > + > +}; @@ -216,38 +222,38 @@ Simplify all of these by using the DEFINE_RES_* defines. Please simply by using REGMAP_IRQ_REG(). > +#define MAX77620_SUB_MODULE_RES(_name, _id) \ -> + [_id] = { \ -> + .name = "max77620-"#_name, \ -> + .num_resources = ARRAY_SIZE(_name##_resources), \ -> + .resources = &_name##_resources[0], \ -> + .id = _id, \ +> + [_id] =3D { \ +> + .name =3D "max77620-"#_name, \ +> + .num_resources =3D ARRAY_SIZE(_name##_resources), \ +> + .resources =3D &_name##_resources[0], \ +> + .id =3D _id, \ > + } > + > +#define MAX20024_SUB_MODULE_RES(_name, _id) \ -> + [_id] = { \ -> + .name = "max20024-"#_name, \ -> + .num_resources = ARRAY_SIZE(_name##_resources), \ -> + .resources = &_name##_resources[0], \ -> + .id = _id, \ +> + [_id] =3D { \ +> + .name =3D "max20024-"#_name, \ +> + .num_resources =3D ARRAY_SIZE(_name##_resources), \ +> + .resources =3D &_name##_resources[0], \ +> + .id =3D _id, \ > + } > + > +#define MAX77620_SUB_MODULE_NO_RES(_name, _id) \ -> + [_id] = { \ -> + .name = "max77620-"#_name, \ -> + .id = _id, \ +> + [_id] =3D { \ +> + .name =3D "max77620-"#_name, \ +> + .id =3D _id, \ > + } > + > +#define MAX20024_SUB_MODULE_NO_RES(_name, _id) \ -> + [_id] = { \ -> + .name = "max20024-"#_name, \ -> + .id = _id, \ +> + [_id] =3D { \ +> + .name =3D "max20024-"#_name, \ +> + .id =3D _id, \ > + } I don't want people hand-rolling this stuff. If it's useful to you, it's useful to others, so great a generic implementation that lives in the kernel headers directory. -> +static struct mfd_cell max77620_children[] = { +> +static struct mfd_cell max77620_children[] =3D { > + MAX77620_SUB_MODULE_NO_RES(pinctrl, 0), > + MAX77620_SUB_MODULE_RES(gpio, 1), > + MAX77620_SUB_MODULE_NO_RES(pmic, 2), @@ -261,7 +267,7 @@ For what purpose are you id'ing these manually? > +}; > + -> +static struct mfd_cell max20024_children[] = { +> +static struct mfd_cell max20024_children[] =3D { > + MAX20024_SUB_MODULE_NO_RES(pinctrl, 0), > + MAX20024_SUB_MODULE_RES(gpio, 1), > + MAX20024_SUB_MODULE_NO_RES(pmic, 2), @@ -281,106 +287,108 @@ you obtain this dynamically? > +}; > + -> +static const struct max77620_sub_modules max77620_cells = { -> + .cells = max77620_children, -> + .ncells = ARRAY_SIZE(max77620_children), -> + .id = MAX77620, +> +static const struct max77620_sub_modules max77620_cells =3D { +> + .cells =3D max77620_children, +> + .ncells =3D ARRAY_SIZE(max77620_children), +> + .id =3D MAX77620, > +}; > + -> +static const struct max77620_sub_modules max20024_cells = { -> + .cells = max20024_children, -> + .ncells = ARRAY_SIZE(max20024_children), -> + .id = MAX20024, +> +static const struct max77620_sub_modules max20024_cells =3D { +> + .cells =3D max20024_children, +> + .ncells =3D ARRAY_SIZE(max20024_children), +> + .id =3D MAX20024, > +}; > + -> +static struct regmap_irq_chip max77620_top_irq_chip = { -> + .name = "max77620-top", -> + .irqs = max77620_top_irqs, -> + .num_irqs = ARRAY_SIZE(max77620_top_irqs), -> + .num_regs = 2, -> + .status_base = MAX77620_REG_IRQTOP, -> + .mask_base = MAX77620_REG_IRQTOPM, +> +static struct regmap_irq_chip max77620_top_irq_chip =3D { +> + .name =3D "max77620-top", +> + .irqs =3D max77620_top_irqs, +> + .num_irqs =3D ARRAY_SIZE(max77620_top_irqs), +> + .num_regs =3D 2, +> + .status_base =3D MAX77620_REG_IRQTOP, +> + .mask_base =3D MAX77620_REG_IRQTOPM, > +}; > + -> +static const struct regmap_range max77620_readable_ranges[] = { +> +static const struct regmap_range max77620_readable_ranges[] =3D { > + regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4), > +}; > + -> +static const struct regmap_access_table max77620_readable_table = { -> + .yes_ranges = max77620_readable_ranges, -> + .n_yes_ranges = ARRAY_SIZE(max77620_readable_ranges), +> +static const struct regmap_access_table max77620_readable_table =3D { +> + .yes_ranges =3D max77620_readable_ranges, +> + .n_yes_ranges =3D ARRAY_SIZE(max77620_readable_ranges), > +}; > + -> +static const struct regmap_range max20024_readable_ranges[] = { +> +static const struct regmap_range max20024_readable_ranges[] =3D { > + regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4), > + regmap_reg_range(MAX20024_REG_MAX_ADD, MAX20024_REG_MAX_ADD), > +}; > + -> +static const struct regmap_access_table max20024_readable_table = { -> + .yes_ranges = max20024_readable_ranges, -> + .n_yes_ranges = ARRAY_SIZE(max20024_readable_ranges), +> +static const struct regmap_access_table max20024_readable_table =3D { +> + .yes_ranges =3D max20024_readable_ranges, +> + .n_yes_ranges =3D ARRAY_SIZE(max20024_readable_ranges), > +}; > + -> +static const struct regmap_range max77620_writable_ranges[] = { +> +static const struct regmap_range max77620_writable_ranges[] =3D { > + regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4), > +}; > + -> +static const struct regmap_access_table max77620_writable_table = { -> + .yes_ranges = max77620_writable_ranges, -> + .n_yes_ranges = ARRAY_SIZE(max77620_writable_ranges), +> +static const struct regmap_access_table max77620_writable_table =3D { +> + .yes_ranges =3D max77620_writable_ranges, +> + .n_yes_ranges =3D ARRAY_SIZE(max77620_writable_ranges), > +}; > + -> +static const struct regmap_range max77620_cacheable_ranges[] = { +> +static const struct regmap_range max77620_cacheable_ranges[] =3D { > + regmap_reg_range(MAX77620_REG_SD0_CFG, MAX77620_REG_LDO_CFG3), > + regmap_reg_range(MAX77620_REG_FPS_CFG0, MAX77620_REG_FPS_SD3), > +}; > + -> +static const struct regmap_access_table max77620_volatile_table = { -> + .no_ranges = max77620_cacheable_ranges, -> + .n_no_ranges = ARRAY_SIZE(max77620_cacheable_ranges), +> +static const struct regmap_access_table max77620_volatile_table =3D { +> + .no_ranges =3D max77620_cacheable_ranges, +> + .n_no_ranges =3D ARRAY_SIZE(max77620_cacheable_ranges), > +}; > + -> +static const struct regmap_config max77620_regmap_config = { -> + .name = "power-slave", -> + .reg_bits = 8, -> + .val_bits = 8, -> + .max_register = MAX77620_REG_DVSSD4 + 1, -> + .cache_type = REGCACHE_RBTREE, -> + .rd_table = &max77620_readable_table, -> + .wr_table = &max77620_writable_table, -> + .volatile_table = &max77620_volatile_table, +> +static const struct regmap_config max77620_regmap_config =3D { +> + .name =3D "power-slave", +> + .reg_bits =3D 8, +> + .val_bits =3D 8, +> + .max_register =3D MAX77620_REG_DVSSD4 + 1, +> + .cache_type =3D REGCACHE_RBTREE, +> + .rd_table =3D &max77620_readable_table, +> + .wr_table =3D &max77620_writable_table, +> + .volatile_table =3D &max77620_volatile_table, > +}; > + -> +static const struct regmap_config max20024_regmap_config = { -> + .name = "power-slave", -> + .reg_bits = 8, -> + .val_bits = 8, -> + .max_register = MAX20024_REG_MAX_ADD + 1, -> + .cache_type = REGCACHE_RBTREE, -> + .rd_table = &max20024_readable_table, -> + .wr_table = &max77620_writable_table, -> + .volatile_table = &max77620_volatile_table, +> +static const struct regmap_config max20024_regmap_config =3D { +> + .name =3D "power-slave", +> + .reg_bits =3D 8, +> + .val_bits =3D 8, +> + .max_register =3D MAX20024_REG_MAX_ADD + 1, +> + .cache_type =3D REGCACHE_RBTREE, +> + .rd_table =3D &max20024_readable_table, +> + .wr_table =3D &max77620_writable_table, +> + .volatile_table =3D &max77620_volatile_table, > +}; > + > +int max77620_irq_get_virq(struct device *dev, int irq) > +{ -> + struct max77620_chip *chip = dev_get_drvdata(dev); +> + struct max77620_chip *chip =3D dev_get_drvdata(dev); > + > + return regmap_irq_get_virq(chip->top_irq_data, irq); > +} > +EXPORT_SYMBOL_GPL(max77620_irq_get_virq); > + -> +int max77620_reg_write(struct device *dev, unsigned int reg, unsigned int val) +> +int max77620_reg_write(struct device *dev, unsigned int reg, unsigned in= +t val) > +{ -> + struct max77620_chip *chip = dev_get_drvdata(dev); +> + struct max77620_chip *chip =3D dev_get_drvdata(dev); > + > + return regmap_write(chip->rmap, reg, val); > +} > +EXPORT_SYMBOL_GPL(max77620_reg_write); > + -> +int max77620_reg_read(struct device *dev, unsigned int reg, unsigned int *val) +> +int max77620_reg_read(struct device *dev, unsigned int reg, unsigned int= + *val) > +{ -> + struct max77620_chip *chip = dev_get_drvdata(dev); +> + struct max77620_chip *chip =3D dev_get_drvdata(dev); > + > + return regmap_read(chip->rmap, reg, val); > +} @@ -389,7 +397,7 @@ you obtain this dynamically? > +int max77620_reg_update(struct device *dev, unsigned int reg, > + unsigned int mask, unsigned int val) > +{ -> + struct max77620_chip *chip = dev_get_drvdata(dev); +> + struct max77620_chip *chip =3D dev_get_drvdata(dev); > + > + return regmap_update_bits(chip->rmap, reg, mask, val); > +} @@ -402,12 +410,12 @@ devices? > +static int max77620_get_fps_period_reg_value(struct max77620_chip *chip, > + int tperiod) > +{ -> + int base_fps_time = (chip->id == MAX20024) ? 20 : 40; +> + int base_fps_time =3D (chip->id =3D=3D MAX20024) ? 20 : 40; > + int x, i; > + -> + for (i = 0; i < 0x7; ++i) { -> + x = base_fps_time * BIT(i); -> + if (x >= tperiod) +> + for (i =3D 0; i < 0x7; ++i) { +> + x =3D base_fps_time * BIT(i); +> + if (x >=3D tperiod) > + return i; > + } > + @@ -417,13 +425,13 @@ devices? > +static int max77620_config_fps(struct max77620_chip *chip, > + struct device_node *fps_np) > +{ -> + struct device *dev = chip->dev; -> + unsigned int mask = 0, config = 0; +> + struct device *dev =3D chip->dev; +> + unsigned int mask =3D 0, config =3D 0; > + u32 pval; > + int tperiod, fps_id; > + int ret; > + -> + for (fps_id = 0; fps_id < MAX77620_FPS_COUNT; ++fps_id) { +> + for (fps_id =3D 0; fps_id < MAX77620_FPS_COUNT; ++fps_id) { > + if (!strcmp(fps_np->name, of_max77620_fps_node_name[fps_id])) > + break; > + } @@ -431,9 +439,9 @@ devices? Please see my comment at the declaration of of_max77620_fps_node_name for my suggestion. -> + if (fps_id == MAX77620_FPS_COUNT) { +> + if (fps_id =3D=3D MAX77620_FPS_COUNT) { ->= +>=3D > + dev_err(dev, "FPS child name %s is not valid\n", fps_np->name); @@ -442,7 +450,8 @@ for my suggestion. > + return -EINVAL; > + } > + -> + ret = of_property_read_u32(fps_np, "maxim,shutdown-fps-time-period-us", +> + ret =3D of_property_read_u32(fps_np, "maxim,shutdown-fps-time-period-us= +", > + &pval); What's a pval? @@ -450,22 +459,23 @@ What's a pval? Do me that's a pointer to a value, which is not the case here. > + if (!ret) { -> + mask |= MAX77620_FPS_TIME_PERIOD_MASK; -> + chip->shutdown_fps_period[fps_id] = min(pval, 5120U); -> + tperiod = max77620_get_fps_period_reg_value( +> + mask |=3D MAX77620_FPS_TIME_PERIOD_MASK; +> + chip->shutdown_fps_period[fps_id] =3D min(pval, 5120U); +> + tperiod =3D max77620_get_fps_period_reg_value( > + chip, chip->shutdown_fps_period[fps_id]); Don't break lines after '('. -> + config |= tperiod << MAX77620_FPS_TIME_PERIOD_SHIFT; +> + config |=3D tperiod << MAX77620_FPS_TIME_PERIOD_SHIFT; > + } > + -> + ret = of_property_read_u32(fps_np, "maxim,suspend-fps-time-period-us", +> + ret =3D of_property_read_u32(fps_np, "maxim,suspend-fps-time-period-us"= +, > + &pval); > + if (!ret) -> + chip->suspend_fps_period[fps_id] = min(pval, 5120U); +> + chip->suspend_fps_period[fps_id] =3D min(pval, 5120U); > + -> + ret = of_property_read_u32(fps_np, "maxim,fps-control", &pval); +> + ret =3D of_property_read_u32(fps_np, "maxim,fps-control", &pval); > + if (!ret) { > + if (pval > 2) { > + dev_err(dev, "FPS %d fps-control invalid\n", fps_id); @@ -475,28 +485,28 @@ You can't issue an error, then not return one. Either return, or demote to dev_warn(). > + } else { -> + mask |= MAX77620_FPS_EN_SRC_MASK; -> + config |= (pval & 0x3) << MAX77620_FPS_EN_SRC_SHIFT; -> + if (pval == 2) { -> + mask |= MAX77620_FPS_ENFPS_SW_MASK; -> + config |= MAX77620_FPS_ENFPS_SW; +> + mask |=3D MAX77620_FPS_EN_SRC_MASK; +> + config |=3D (pval & 0x3) << MAX77620_FPS_EN_SRC_SHIFT; +> + if (pval =3D=3D 2) { +> + mask |=3D MAX77620_FPS_ENFPS_SW_MASK; +> + config |=3D MAX77620_FPS_ENFPS_SW; > + } > + } > + } > + > + if (!chip->sleep_enable) -> + chip->sleep_enable = of_property_read_bool(fps_np, +> + chip->sleep_enable =3D of_property_read_bool(fps_np, > + "maxim,enable-sleep"); -Better to break at the '=' here. +Better to break at the '=3D' here. > + if (!chip->enable_global_lpm) -> + chip->enable_global_lpm = of_property_read_bool(fps_np, +> + chip->enable_global_lpm =3D of_property_read_bool(fps_np, > + "maxim,enable-global-lpm"); Same here. -> + ret = max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id, +> + ret =3D max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id, > + mask, config); > + if (ret < 0) { > + dev_err(dev, "Reg 0x%02x update failed: %d\n", @@ -515,28 +525,29 @@ Same here. > + int fps_id; > + int ret; > + -> + for (fps_id = 0; fps_id < 3; ++fps_id) { +> + for (fps_id =3D 0; fps_id < 3; ++fps_id) { MAX77620_FPS_COUNT fps_id++ -> + chip->shutdown_fps_period[fps_id] = -1; -> + chip->suspend_fps_period[fps_id] = -1; +> + chip->shutdown_fps_period[fps_id] =3D -1; +> + chip->suspend_fps_period[fps_id] =3D -1; > + } > + -> + fps_np = of_get_child_by_name(dev->of_node, "fps"); +> + fps_np =3D of_get_child_by_name(dev->of_node, "fps"); > + if (!fps_np) > + goto skip_fps; > + > + for_each_child_of_node(fps_np, fps_child) { -> + ret = max77620_config_fps(chip, fps_child); +> + ret =3D max77620_config_fps(chip, fps_child); > + if (ret < 0) > + return ret; > + } > + -> + config = chip->enable_global_lpm ? MAX77620_ONOFFCNFG2_SLP_LPM_MSK : 0; -> + ret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, +> + config =3D chip->enable_global_lpm ? MAX77620_ONOFFCNFG2_SLP_LPM_MSK : = +0; +> + ret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, > + MAX77620_ONOFFCNFG2_SLP_LPM_MSK, config); > + if (ret < 0) { > + dev_err(dev, "Reg ONOFFCNFG2 update failed: %d\n", ret); @@ -545,7 +556,7 @@ fps_id++ > + > +skip_fps: > + /* Enable wake on EN0 pin */ -> + ret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, +> + ret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, > + MAX77620_ONOFFCNFG2_WK_EN0, > + MAX77620_ONOFFCNFG2_WK_EN0); > + if (ret < 0) { @@ -554,13 +565,13 @@ fps_id++ > + } > + > + if (!chip->sleep_enable) -> + chip->sleep_enable = of_property_read_bool(dev->of_node, +> + chip->sleep_enable =3D of_property_read_bool(dev->of_node, > + "maxim,enable-sleep"); > + > + /* For MAX20024, SLPEN will be POR reset if CLRSE is b11 */ -> + if ((chip->id == MAX20024) && chip->sleep_enable) { -> + config = MAX77620_ONOFFCNFG1_SLPEN | MAX20024_ONOFFCNFG1_CLRSE; -> + ret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1, +> + if ((chip->id =3D=3D MAX20024) && chip->sleep_enable) { +> + config =3D MAX77620_ONOFFCNFG1_SLPEN | MAX20024_ONOFFCNFG1_CLRSE; +> + ret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1, > + config, config); > + if (ret < 0) { > + dev_err(dev, "Reg ONOFFCNFG1 update failed: %d\n", ret); @@ -574,26 +585,27 @@ fps_id++ > +static int max77620_initialise_chip(struct max77620_chip *chip, > + struct device *dev) > +{ -> + struct device_node *np = dev->of_node; -> + u32 mrt_time = 0; +> + struct device_node *np =3D dev->of_node; +> + u32 mrt_time =3D 0; > + u8 reg_val; > + int ret; > + -> + ret = of_property_read_u32(np, "maxim,hard-power-off-time", &mrt_time); +> + ret =3D of_property_read_u32(np, "maxim,hard-power-off-time", &mrt_time= +); > + if (ret < 0) > + return 0; > + -> + mrt_time = (mrt_time > 12) ? 12 : mrt_time; -> + if (mrt_time <= 6) -> + reg_val = mrt_time - 2; +> + mrt_time =3D (mrt_time > 12) ? 12 : mrt_time; +> + if (mrt_time <=3D 6) +> + reg_val =3D mrt_time - 2; > + else -> + reg_val = (mrt_time - 6) / 2 + 4; +> + reg_val =3D (mrt_time - 6) / 2 + 4; These need defining. -> + reg_val <<= MAX77620_ONOFFCNFG1_MRT_SHIFT; +> + reg_val <<=3D MAX77620_ONOFFCNFG1_MRT_SHIFT; > + -> + ret = max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG1, +> + ret =3D max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG1, > + MAX77620_ONOFFCNFG1_MRT_MASK, reg_val); > + if (ret < 0) { > + dev_err(dev, "REG ONOFFCNFG1 update failed: %d\n", ret); @@ -601,7 +613,7 @@ These need defining. > + } > + > + /* Disable alarm wake to enable sleep from EN input signal */ -> + ret = max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG2, +> + ret =3D max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG2, > + MAX77620_ONOFFCNFG2_WK_ALARM1, 0); > + if (ret < 0) { > + dev_err(dev, "REG ONOFFCNFG2 update failed: %d\n", ret); @@ -618,11 +630,11 @@ These need defining. > + int i; > + int ret; > + -> + for (i = MAX77620_REG_CID0; i <= MAX77620_REG_CID5; ++i) { +> + for (i =3D MAX77620_REG_CID0; i <=3D MAX77620_REG_CID5; ++i) { i++ -> + ret = max77620_reg_read(chip->dev, i, &val); +> + ret =3D max77620_reg_read(chip->dev, i, &val); > + if (ret < 0) { > + dev_err(chip->dev, "CID%d register read failed: %d\n", > + i - MAX77620_REG_CID0, ret); @@ -631,7 +643,7 @@ i++ > + dev_dbg(chip->dev, "CID%d: 0x%02x\n", > + i - MAX77620_REG_CID0, val); -> + cid_val[i - MAX77620_REG_CID0] = val; +> + cid_val[i - MAX77620_REG_CID0] =3D val; > + } > + > + /* CID4 is OTP Version and CID5 is ES version */ @@ -644,61 +656,61 @@ i++ > +static int max77620_probe(struct i2c_client *client, > + const struct i2c_device_id *id) > +{ -> + struct device_node *node = client->dev.of_node; +> + struct device_node *node =3D client->dev.of_node; You've used 'np' before, which also happens to be my preference. > + const struct max77620_sub_modules *children; -> + const struct regmap_config *rmap_config = &max77620_regmap_config; +> + const struct regmap_config *rmap_config =3D &max77620_regmap_config; > + struct max77620_chip *chip; -> + int ret = 0; +> + int ret =3D 0; > + > + if (!node) { > + dev_err(&client->dev, "Device is not from DT\n"); > + return -ENODEV; > + } > + -> + children = of_device_get_match_data(&client->dev); +> + children =3D of_device_get_match_data(&client->dev); > + if (!children) > + return -ENODEV; > + -> + chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); +> + chip =3D devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); > + if (!chip) > + return -ENOMEM; > + > + i2c_set_clientdata(client, chip); -> + chip->dev = &client->dev; -> + chip->irq_base = -1; -> + chip->chip_irq = client->irq; -> + chip->id = children->id; -> + chip->base_client = client; +> + chip->dev =3D &client->dev; +> + chip->irq_base =3D -1; +> + chip->chip_irq =3D client->irq; +> + chip->id =3D children->id; +> + chip->base_client =3D client; You don't need client AND client->dev AND client->irq. If you have one, you have them all, please the superfluous attributes. -> + if (chip->id == MAX20024) -> + rmap_config = &max20024_regmap_config; +> + if (chip->id =3D=3D MAX20024) +> + rmap_config =3D &max20024_regmap_config; > + -> + chip->rmap = devm_regmap_init_i2c(chip->base_client, rmap_config); +> + chip->rmap =3D devm_regmap_init_i2c(chip->base_client, rmap_config); > + if (IS_ERR(chip->rmap)) { -> + ret = PTR_ERR(chip->rmap); +> + ret =3D PTR_ERR(chip->rmap); > + dev_err(&client->dev, "regmap init failed %d\n", ret); > + return ret; > + } > + > + mutex_init(&chip->mutex_config); > + -> + ret = max77620_read_es_version(chip); +> + ret =3D max77620_read_es_version(chip); > + if (ret < 0) > + return ret; > + -> + ret = max77620_initialise_chip(chip, &client->dev); +> + ret =3D max77620_initialise_chip(chip, &client->dev); > + if (ret < 0) > + return ret; > + -> + ret = regmap_add_irq_chip(chip->rmap, chip->chip_irq, +> + ret =3D regmap_add_irq_chip(chip->rmap, chip->chip_irq, > + IRQF_ONESHOT | IRQF_SHARED, > + chip->irq_base, &max77620_top_irq_chip, > + &chip->top_irq_data); @@ -709,11 +721,11 @@ attributes. What do you mean by 'top'? -> + ret = max77620_initialise_fps(chip, &client->dev); +> + ret =3D max77620_initialise_fps(chip, &client->dev); > + if (ret < 0) > + goto fail_free_irq; > + -> + ret = mfd_add_devices(&client->dev, -1, children->cells, +> + ret =3D mfd_add_devices(&client->dev, -1, children->cells, Please use the PLATFORM_DEVID_ defines. @@ -737,7 +749,7 @@ Please use the PLATFORM_DEVID_ defines. > + > +static int max77620_remove(struct i2c_client *client) > +{ -> + struct max77620_chip *chip = i2c_get_clientdata(client); +> + struct max77620_chip *chip =3D i2c_get_clientdata(client); > + > + mfd_remove_devices(chip->dev); > + regmap_del_irq_chip(chip->chip_irq, chip->top_irq_data); @@ -749,11 +761,11 @@ Please use the PLATFORM_DEVID_ defines. > +static int max77620_set_fps_period(struct max77620_chip *chip, > + int fps_id, int time_period) > +{ -> + struct device *dev = chip->dev; -> + int period = max77620_get_fps_period_reg_value(chip, time_period); +> + struct device *dev =3D chip->dev; +> + int period =3D max77620_get_fps_period_reg_value(chip, time_period); > + int ret; > + -> + ret = max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id, +> + ret =3D max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id, > + MAX77620_FPS_TIME_PERIOD_MASK, > + period << MAX77620_FPS_TIME_PERIOD_SHIFT); > + if (ret < 0) { @@ -767,16 +779,16 @@ Please use the PLATFORM_DEVID_ defines. > + > +static int max77620_i2c_suspend(struct device *dev) > +{ -> + struct max77620_chip *chip = dev_get_drvdata(dev); +> + struct max77620_chip *chip =3D dev_get_drvdata(dev); > + unsigned int config; > + int fps; > + int ret; > + -> + for (fps = 0; fps < 2; ++fps) { +> + for (fps =3D 0; fps < 2; ++fps) { > + if (chip->suspend_fps_period[fps] < 0) > + continue; > + -> + ret = max77620_set_fps_period(chip, fps, +> + ret =3D max77620_set_fps_period(chip, fps, > + chip->suspend_fps_period[fps]); > + if (ret < 0) > + dev_err(dev, "FPS%d config failed: %d\n", fps, ret); @@ -786,11 +798,11 @@ Please use the PLATFORM_DEVID_ defines. > + * For MAX20024: No need to configure SLPEN on suspend as > + * it will be configured on Init. > + */ -> + if (chip->id == MAX20024) +> + if (chip->id =3D=3D MAX20024) > + goto out; > + -> + config = (chip->sleep_enable) ? MAX77620_ONOFFCNFG1_SLPEN : 0; -> + ret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1, +> + config =3D (chip->sleep_enable) ? MAX77620_ONOFFCNFG1_SLPEN : 0; +> + ret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1, > + MAX77620_ONOFFCNFG1_SLPEN, > + config); > + if (ret < 0) { @@ -799,7 +811,7 @@ Please use the PLATFORM_DEVID_ defines. > + } > + > + /* Disable WK_EN0 */ -> + ret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, +> + ret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, > + MAX77620_ONOFFCNFG2_WK_EN0, 0); > + if (ret < 0) { > + dev_err(dev, "Reg ONOFFCNFG2 WK_EN0 update failed: %d\n", ret); @@ -814,15 +826,15 @@ Please use the PLATFORM_DEVID_ defines. > + > +static int max77620_i2c_resume(struct device *dev) > +{ -> + struct max77620_chip *chip = dev_get_drvdata(dev); +> + struct max77620_chip *chip =3D dev_get_drvdata(dev); > + int ret; > + int fps; > + -> + for (fps = 0; fps < 2; ++fps) { +> + for (fps =3D 0; fps < 2; ++fps) { > + if (chip->shutdown_fps_period[fps] < 0) > + continue; > + -> + ret = max77620_set_fps_period(chip, fps, +> + ret =3D max77620_set_fps_period(chip, fps, > + chip->shutdown_fps_period[fps]); > + if (ret < 0) > + dev_err(dev, "FPS%d config failed: %d\n", fps, ret); @@ -832,11 +844,11 @@ Please use the PLATFORM_DEVID_ defines. > + * For MAX20024: No need to configure WKEN0 on resume as > + * it is configured on Init. > + */ -> + if (chip->id == MAX20024) +> + if (chip->id =3D=3D MAX20024) > + goto out; > + > + /* Enable WK_EN0 */ -> + ret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, +> + ret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2, > + MAX77620_ONOFFCNFG2_WK_EN0, > + MAX77620_ONOFFCNFG2_WK_EN0); > + if (ret < 0) { @@ -851,20 +863,20 @@ Please use the PLATFORM_DEVID_ defines. > +} > +#endif > + -> +static const struct i2c_device_id max77620_id[] = { +> +static const struct i2c_device_id max77620_id[] =3D { > + {"max77620", MAX77620}, > + {"max20024", MAX20024}, > + {}, > +}; > +MODULE_DEVICE_TABLE(i2c, max77620_id); > + -> +static const struct of_device_id max77620_of_match[] = { +> +static const struct of_device_id max77620_of_match[] =3D { > + { -> + .compatible = "maxim,max77620", -> + .data = &max77620_cells, +> + .compatible =3D "maxim,max77620", +> + .data =3D &max77620_cells, > + }, { -> + .compatible = "maxim,max20024", -> + .data = &max20024_cells, +> + .compatible =3D "maxim,max20024", +> + .data =3D &max20024_cells, > + }, { > + }, > +}; @@ -873,24 +885,25 @@ Please use the PLATFORM_DEVID_ defines. This is not acceptable. EITHER use DT OR MFD methods of registering devices, do not mix the two. -> +static const struct dev_pm_ops max77620_pm_ops = { +> +static const struct dev_pm_ops max77620_pm_ops =3D { > + SET_SYSTEM_SLEEP_PM_OPS(max77620_i2c_suspend, max77620_i2c_resume) > +}; > + -> +static struct i2c_driver max77620_driver = { -> + .driver = { -> + .name = "max77620", -> + .pm = &max77620_pm_ops, -> + .of_match_table = max77620_of_match, +> +static struct i2c_driver max77620_driver =3D { +> + .driver =3D { +> + .name =3D "max77620", +> + .pm =3D &max77620_pm_ops, +> + .of_match_table =3D max77620_of_match, > + }, -> + .probe = max77620_probe, -> + .remove = max77620_remove, -> + .id_table = max77620_id, +> + .probe =3D max77620_probe, +> + .remove =3D max77620_remove, +> + .id_table =3D max77620_id, > +}; > + > +module_i2c_driver(max77620_driver); > + -> +MODULE_DESCRIPTION("MAX77620/MAX20024 Multi Function Device Core Driver"); +> +MODULE_DESCRIPTION("MAX77620/MAX20024 Multi Function Device Core Driver"= +); > +MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>"); > +MODULE_AUTHOR("Chaitanya Bandi <bandik@nvidia.com>"); > +MODULE_AUTHOR("Mallikarjun Kasoju <mkasoju@nvidia.com>"); @@ -911,13 +924,16 @@ Please remove the filename from the header. > + * > + * Copyright (C) 2016 NVIDIA CORPORATION. All rights reserved. > + * -> + * This program is free software; you can redistribute it and/or modify it +> + * This program is free software; you can redistribute it and/or modify = +it > + * under the terms and conditions of the GNU General Public License, > + * version 2, as published by the Free Software Foundation. > + * -> + * This program is distributed in the hope it will be useful, but WITHOUT +> + * This program is distributed in the hope it will be useful, but WITHOU= +T > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License= + for > + * more details. > + */ @@ -1314,8 +1330,21 @@ Can you use the shorter version? > + unsigned int mask, unsigned int val); > +#endif /* _LINUX_MFD_MAX77620_H_ */ --- +--=20 Lee Jones Linaro STMicroelectronics Landing Team Lead -Linaro.org │ Open source software for ARM SoCs +Linaro.org =E2=94=82 Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog + +--=20 +--=20 +You received this message because you are subscribed to "rtc-linux". +Membership options at http://groups.google.com/group/rtc-linux . +Please read http://groups.google.com/group/rtc-linux/web/checklist +before submitting a driver. +---=20 +You received this message because you are subscribed to the Google Groups "= +rtc-linux" group. +To unsubscribe from this group and stop receiving emails from it, send an e= +mail to rtc-linux+unsubscribe@googlegroups.com. +For more options, visit https://groups.google.com/d/optout. diff --git a/a/content_digest b/N1/content_digest index a18b776..7a2618a 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,7 +1,7 @@ "ref\01453988274-28052-1-git-send-email-ldewangan@nvidia.com\0" "ref\01453988274-28052-3-git-send-email-ldewangan@nvidia.com\0" "From\0Lee Jones <lee.jones@linaro.org>\0" - "Subject\0Re: [PATCH V6 2/8] mfd: max77620: add core driver for MAX77620/MAX20024\0" + "Subject\0[rtc-linux] Re: [PATCH V6 2/8] mfd: max77620: add core driver for MAX77620/MAX20024\0" "Date\0Fri, 29 Jan 2016 09:06:32 +0000\0" "To\0Laxman Dewangan <ldewangan@nvidia.com>\0" "Cc\0robh+dt@kernel.org" @@ -31,46 +31,49 @@ "> MAX77620/MAX20024 are Power Management IC from the MAXIM.\n" "> It supports RTC, multiple GPIOs, multiple DCDC and LDOs,\n" "> watchdog, clock etc.\n" - "> \n" + ">=20\n" "> Add MFD drier to provides common support for accessing the\n" "> device; additional drivers is developed on respected subsystem\n" "> in order to use the functionality of the device.\n" - "> \n" + ">=20\n" "> Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>\n" "> Signed-off-by: Chaitanya Bandi <bandik@nvidia.com>\n" "> Signed-off-by: Mallikarjun Kasoju <mkasoju@nvidia.com>\n" "> Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>\n" "> ---\n" "> Changes from V1:\n" - "> - Code cleanups per review from V1. \n" + "> - Code cleanups per review from V1.=20\n" "> - Move register acccess APIs from header to c file.\n" - "> - Remove some of non required variable, remove duplication in error message\n" + "> - Remove some of non required variable, remove duplication in error messa=\n" + "ge\n" "> and simplify some of function implementation.\n" - "> - Register RTC driver such that it can get the regmap handle form parent device\n" - "> \n" + "> - Register RTC driver such that it can get the regmap handle form parent =\n" + "device\n" + ">=20\n" "> Changes from V2:\n" "> - Run coccicheck and checkpatch in strict mode for the alignment.\n" "> - Drop RTC driver and its i2c client registration.\n" - "> \n" - "> Changes from V3: \n" - "> - Change all sys initcall to module driver. \n" + ">=20\n" + "> Changes from V3: =20\n" + "> - Change all sys initcall to module driver. =20\n" "> - change the max77620_read argument to unisgned int from u8.\n" - "> \n" - "> Changes from V4: \n" + ">=20\n" + "> Changes from V4: =20\n" "> - Take care of fps nodes.\n" "> - Drop the battery charger and low battery binding and related code as\n" "> it need to go on power driver.\n" - "> Changes from V5: \n" + "> Changes from V5: =20\n" "> -None\n" - "> \n" + ">=20\n" "> drivers/mfd/Kconfig | 15 +\n" "> drivers/mfd/Makefile | 1 +\n" - "> drivers/mfd/max77620.c | 727 +++++++++++++++++++++++++++++++++++++++++++\n" + "> drivers/mfd/max77620.c | 727 +++++++++++++++++++++++++++++++++++++=\n" + "++++++\n" "> include/linux/mfd/max77620.h | 406 ++++++++++++++++++++++++\n" "> 4 files changed, 1149 insertions(+)\n" "> create mode 100644 drivers/mfd/max77620.c\n" "> create mode 100644 include/linux/mfd/max77620.h\n" - "> \n" + ">=20\n" "> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig\n" "> index 9ca66de..e5ad974 100644\n" "> --- a/drivers/mfd/Kconfig\n" @@ -78,10 +81,10 @@ "> @@ -492,6 +492,21 @@ config MFD_MAX14577\n" "> \t additional drivers must be enabled in order to use the functionality\n" "> \t of the device.\n" - "> \n" + "> =20\n" "> +config MFD_MAX77620\n" "> +\tbool \"Maxim Semiconductor MAX77620 and MAX20024 PMIC Support\"\n" - "> +\tdepends on I2C=y\n" + "> +\tdepends on I2C=3Dy\n" "> +\tdepends on OF\n" "> +\tselect MFD_CORE\n" "> +\tselect REGMAP_I2C\n" @@ -96,19 +99,19 @@ "> +\n" "> config MFD_MAX77686\n" "> \tbool \"Maxim Semiconductor MAX77686/802 PMIC Support\"\n" - "> \tdepends on I2C=y\n" + "> \tdepends on I2C=3Dy\n" "> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile\n" "> index 0f230a6..97910ed 100644\n" "> --- a/drivers/mfd/Makefile\n" "> +++ b/drivers/mfd/Makefile\n" - "> @@ -123,6 +123,7 @@ obj-$(CONFIG_MFD_DA9063)\t+= da9063.o\n" - "> obj-$(CONFIG_MFD_DA9150)\t+= da9150-core.o\n" - "> \n" - "> obj-$(CONFIG_MFD_MAX14577)\t+= max14577.o\n" - "> +obj-$(CONFIG_MFD_MAX77620)\t+= max77620.o\n" - "> obj-$(CONFIG_MFD_MAX77686)\t+= max77686.o\n" - "> obj-$(CONFIG_MFD_MAX77693)\t+= max77693.o\n" - "> obj-$(CONFIG_MFD_MAX77843)\t+= max77843.o\n" + "> @@ -123,6 +123,7 @@ obj-$(CONFIG_MFD_DA9063)\t+=3D da9063.o\n" + "> obj-$(CONFIG_MFD_DA9150)\t+=3D da9150-core.o\n" + "> =20\n" + "> obj-$(CONFIG_MFD_MAX14577)\t+=3D max14577.o\n" + "> +obj-$(CONFIG_MFD_MAX77620)\t+=3D max77620.o\n" + "> obj-$(CONFIG_MFD_MAX77686)\t+=3D max77686.o\n" + "> obj-$(CONFIG_MFD_MAX77693)\t+=3D max77693.o\n" + "> obj-$(CONFIG_MFD_MAX77843)\t+=3D max77843.o\n" "> diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c\n" "> new file mode 100644\n" "> index 0000000..49318c3\n" @@ -125,13 +128,16 @@ "> + *\tChaitanya Bandi <bandik@nvidia.com>\n" "> + *\tMallikarjun Kasoju <mkasoju@nvidia.com>\n" "> + *\n" - "> + * This program is free software; you can redistribute it and/or modify it\n" + "> + * This program is free software; you can redistribute it and/or modify =\n" + "it\n" "> + * under the terms and conditions of the GNU General Public License,\n" "> + * version 2, as published by the Free Software Foundation.\n" "> + *\n" - "> + * This program is distributed in the hope it will be useful, but WITHOUT\n" + "> + * This program is distributed in the hope it will be useful, but WITHOU=\n" + "T\n" "> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n" - "> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n" + "> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License=\n" + " for\n" "> + * more details.\n" "> + */\n" "\n" @@ -149,7 +155,7 @@ "\n" "Alphabetical.\n" "\n" - "> +static const char *of_max77620_fps_node_name[MAX77620_FPS_COUNT] = {\n" + "> +static const char *of_max77620_fps_node_name[MAX77620_FPS_COUNT] =3D {\n" "> +\t\"fps0\",\n" "> +\t\"fps1\",\n" "> +\t\"fps2\"\n" @@ -157,86 +163,86 @@ "\n" "No need for this arrray. Just use '\"fps%d\", i' in the for loop below.\n" "\n" - "> +static struct resource gpio_resources[] = {\n" + "> +static struct resource gpio_resources[] =3D {\n" "> +\t{\n" - "> +\t\t.start\t= MAX77620_IRQ_TOP_GPIO,\n" - "> +\t\t.end\t= MAX77620_IRQ_TOP_GPIO,\n" - "> +\t\t.flags = IORESOURCE_IRQ,\n" + "> +\t\t.start\t=3D MAX77620_IRQ_TOP_GPIO,\n" + "> +\t\t.end\t=3D MAX77620_IRQ_TOP_GPIO,\n" + "> +\t\t.flags =3D IORESOURCE_IRQ,\n" "> +\t}\n" "> +};\n" "> +\n" - "> +static struct resource power_resources[] = {\n" + "> +static struct resource power_resources[] =3D {\n" "> +\t{\n" - "> +\t\t.start\t= MAX77620_IRQ_LBT_MBATLOW,\n" - "> +\t\t.end\t= MAX77620_IRQ_LBT_MBATLOW,\n" - "> +\t\t.flags = IORESOURCE_IRQ,\n" + "> +\t\t.start\t=3D MAX77620_IRQ_LBT_MBATLOW,\n" + "> +\t\t.end\t=3D MAX77620_IRQ_LBT_MBATLOW,\n" + "> +\t\t.flags =3D IORESOURCE_IRQ,\n" "> +\t}\n" "> +};\n" "> +\n" - "> +static struct resource rtc_resources[] = {\n" + "> +static struct resource rtc_resources[] =3D {\n" "> +\t{\n" - "> +\t\t.start\t= MAX77620_IRQ_TOP_RTC,\n" - "> +\t\t.end\t= MAX77620_IRQ_TOP_RTC,\n" - "> +\t\t.flags = IORESOURCE_IRQ,\n" + "> +\t\t.start\t=3D MAX77620_IRQ_TOP_RTC,\n" + "> +\t\t.end\t=3D MAX77620_IRQ_TOP_RTC,\n" + "> +\t\t.flags =3D IORESOURCE_IRQ,\n" "> +\t}\n" "> +};\n" "> +\n" - "> +static struct resource thermal_resources[] = {\n" + "> +static struct resource thermal_resources[] =3D {\n" "> +\t{\n" - "> +\t\t.start\t= MAX77620_IRQ_LBT_TJALRM1,\n" - "> +\t\t.end\t= MAX77620_IRQ_LBT_TJALRM1,\n" - "> +\t\t.flags = IORESOURCE_IRQ,\n" + "> +\t\t.start\t=3D MAX77620_IRQ_LBT_TJALRM1,\n" + "> +\t\t.end\t=3D MAX77620_IRQ_LBT_TJALRM1,\n" + "> +\t\t.flags =3D IORESOURCE_IRQ,\n" "> +\t},\n" "> +\t{\n" - "> +\t\t.start\t= MAX77620_IRQ_LBT_TJALRM2,\n" - "> +\t\t.end\t= MAX77620_IRQ_LBT_TJALRM2,\n" - "> +\t\t.flags = IORESOURCE_IRQ,\n" + "> +\t\t.start\t=3D MAX77620_IRQ_LBT_TJALRM2,\n" + "> +\t\t.end\t=3D MAX77620_IRQ_LBT_TJALRM2,\n" + "> +\t\t.flags =3D IORESOURCE_IRQ,\n" "> +\t}\n" "> +};\n" "\n" "Simplify all of these by using the DEFINE_RES_* defines.\n" "\n" - "> +static const struct regmap_irq max77620_top_irqs[] = {\n" - "> +\t[MAX77620_IRQ_TOP_GLBL] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TOP_GLBL_MASK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +static const struct regmap_irq max77620_top_irqs[] =3D {\n" + "> +\t[MAX77620_IRQ_TOP_GLBL] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TOP_GLBL_MASK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_TOP_SD] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TOP_SD_MASK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[MAX77620_IRQ_TOP_SD] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TOP_SD_MASK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_TOP_LDO] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TOP_LDO_MASK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[MAX77620_IRQ_TOP_LDO] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TOP_LDO_MASK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_TOP_GPIO] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TOP_GPIO_MASK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[MAX77620_IRQ_TOP_GPIO] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TOP_GPIO_MASK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_TOP_RTC] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TOP_RTC_MASK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[MAX77620_IRQ_TOP_RTC] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TOP_RTC_MASK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_TOP_32K] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TOP_32K_MASK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[MAX77620_IRQ_TOP_32K] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TOP_32K_MASK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_TOP_ONOFF] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TOP_ONOFF_MASK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[MAX77620_IRQ_TOP_ONOFF] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TOP_ONOFF_MASK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" "> +\n" - "> +\t[MAX77620_IRQ_LBT_MBATLOW] = {\n" - "> +\t\t.mask = MAX77620_IRQ_LBM_MASK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[MAX77620_IRQ_LBT_MBATLOW] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_LBM_MASK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_LBT_TJALRM1] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TJALRM1_MASK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[MAX77620_IRQ_LBT_TJALRM1] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TJALRM1_MASK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[MAX77620_IRQ_LBT_TJALRM2] = {\n" - "> +\t\t.mask = MAX77620_IRQ_TJALRM2_MASK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[MAX77620_IRQ_LBT_TJALRM2] =3D {\n" + "> +\t\t.mask =3D MAX77620_IRQ_TJALRM2_MASK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" "> +\n" "> +};\n" @@ -244,38 +250,38 @@ "Please simply by using REGMAP_IRQ_REG().\n" "\n" "> +#define MAX77620_SUB_MODULE_RES(_name, _id)\t\t\t\\\n" - "> +\t[_id] = {\t\t\t\t\t\t\\\n" - "> +\t\t.name = \"max77620-\"#_name,\t\t\t\\\n" - "> +\t\t.num_resources\t= ARRAY_SIZE(_name##_resources), \\\n" - "> +\t\t.resources\t= &_name##_resources[0],\t\\\n" - "> +\t\t.id = _id,\t\t\t\t\t\\\n" + "> +\t[_id] =3D {\t\t\t\t\t\t\\\n" + "> +\t\t.name =3D \"max77620-\"#_name,\t\t\t\\\n" + "> +\t\t.num_resources\t=3D ARRAY_SIZE(_name##_resources), \\\n" + "> +\t\t.resources\t=3D &_name##_resources[0],\t\\\n" + "> +\t\t.id =3D _id,\t\t\t\t\t\\\n" "> +\t}\n" "> +\n" "> +#define MAX20024_SUB_MODULE_RES(_name, _id)\t\t\t\\\n" - "> +\t[_id] = {\t\t\t\t\t\t\\\n" - "> +\t\t.name = \"max20024-\"#_name,\t\t\t\\\n" - "> +\t\t.num_resources\t= ARRAY_SIZE(_name##_resources), \\\n" - "> +\t\t.resources\t= &_name##_resources[0],\t\\\n" - "> +\t\t.id = _id,\t\t\t\t\t\\\n" + "> +\t[_id] =3D {\t\t\t\t\t\t\\\n" + "> +\t\t.name =3D \"max20024-\"#_name,\t\t\t\\\n" + "> +\t\t.num_resources\t=3D ARRAY_SIZE(_name##_resources), \\\n" + "> +\t\t.resources\t=3D &_name##_resources[0],\t\\\n" + "> +\t\t.id =3D _id,\t\t\t\t\t\\\n" "> +\t}\n" "> +\n" "> +#define MAX77620_SUB_MODULE_NO_RES(_name, _id)\t\t\t\\\n" - "> +\t[_id] = {\t\t\t\t\t\t\\\n" - "> +\t\t.name = \"max77620-\"#_name,\t\t\t\\\n" - "> +\t\t.id = _id,\t\t\t\t\t\\\n" + "> +\t[_id] =3D {\t\t\t\t\t\t\\\n" + "> +\t\t.name =3D \"max77620-\"#_name,\t\t\t\\\n" + "> +\t\t.id =3D _id,\t\t\t\t\t\\\n" "> +\t}\n" "> +\n" "> +#define MAX20024_SUB_MODULE_NO_RES(_name, _id)\t\t\t\\\n" - "> +\t[_id] = {\t\t\t\t\t\t\\\n" - "> +\t\t.name = \"max20024-\"#_name,\t\t\t\\\n" - "> +\t\t.id = _id,\t\t\t\t\t\\\n" + "> +\t[_id] =3D {\t\t\t\t\t\t\\\n" + "> +\t\t.name =3D \"max20024-\"#_name,\t\t\t\\\n" + "> +\t\t.id =3D _id,\t\t\t\t\t\\\n" "> +\t}\n" "\n" "I don't want people hand-rolling this stuff. If it's useful to you,\n" "it's useful to others, so great a generic implementation that lives in\n" "the kernel headers directory.\n" "\n" - "> +static struct mfd_cell max77620_children[] = {\n" + "> +static struct mfd_cell max77620_children[] =3D {\n" "> +\tMAX77620_SUB_MODULE_NO_RES(pinctrl, 0),\n" "> +\tMAX77620_SUB_MODULE_RES(gpio, 1),\n" "> +\tMAX77620_SUB_MODULE_NO_RES(pmic, 2),\n" @@ -289,7 +295,7 @@ "\n" "> +};\n" "> +\n" - "> +static struct mfd_cell max20024_children[] = {\n" + "> +static struct mfd_cell max20024_children[] =3D {\n" "> +\tMAX20024_SUB_MODULE_NO_RES(pinctrl, 0),\n" "> +\tMAX20024_SUB_MODULE_RES(gpio, 1),\n" "> +\tMAX20024_SUB_MODULE_NO_RES(pmic, 2),\n" @@ -309,106 +315,108 @@ "\n" "> +};\n" "> +\n" - "> +static const struct max77620_sub_modules max77620_cells = {\n" - "> +\t.cells = max77620_children,\n" - "> +\t.ncells = ARRAY_SIZE(max77620_children),\n" - "> +\t.id = MAX77620,\n" + "> +static const struct max77620_sub_modules max77620_cells =3D {\n" + "> +\t.cells =3D max77620_children,\n" + "> +\t.ncells =3D ARRAY_SIZE(max77620_children),\n" + "> +\t.id =3D MAX77620,\n" "> +};\n" "> +\n" - "> +static const struct max77620_sub_modules max20024_cells = {\n" - "> +\t.cells = max20024_children,\n" - "> +\t.ncells = ARRAY_SIZE(max20024_children),\n" - "> +\t.id = MAX20024,\n" + "> +static const struct max77620_sub_modules max20024_cells =3D {\n" + "> +\t.cells =3D max20024_children,\n" + "> +\t.ncells =3D ARRAY_SIZE(max20024_children),\n" + "> +\t.id =3D MAX20024,\n" "> +};\n" "> +\n" - "> +static struct regmap_irq_chip max77620_top_irq_chip = {\n" - "> +\t.name = \"max77620-top\",\n" - "> +\t.irqs = max77620_top_irqs,\n" - "> +\t.num_irqs = ARRAY_SIZE(max77620_top_irqs),\n" - "> +\t.num_regs = 2,\n" - "> +\t.status_base = MAX77620_REG_IRQTOP,\n" - "> +\t.mask_base = MAX77620_REG_IRQTOPM,\n" + "> +static struct regmap_irq_chip max77620_top_irq_chip =3D {\n" + "> +\t.name =3D \"max77620-top\",\n" + "> +\t.irqs =3D max77620_top_irqs,\n" + "> +\t.num_irqs =3D ARRAY_SIZE(max77620_top_irqs),\n" + "> +\t.num_regs =3D 2,\n" + "> +\t.status_base =3D MAX77620_REG_IRQTOP,\n" + "> +\t.mask_base =3D MAX77620_REG_IRQTOPM,\n" "> +};\n" "> +\n" - "> +static const struct regmap_range max77620_readable_ranges[] = {\n" + "> +static const struct regmap_range max77620_readable_ranges[] =3D {\n" "> +\tregmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4),\n" "> +};\n" "> +\n" - "> +static const struct regmap_access_table max77620_readable_table = {\n" - "> +\t.yes_ranges = max77620_readable_ranges,\n" - "> +\t.n_yes_ranges = ARRAY_SIZE(max77620_readable_ranges),\n" + "> +static const struct regmap_access_table max77620_readable_table =3D {\n" + "> +\t.yes_ranges =3D max77620_readable_ranges,\n" + "> +\t.n_yes_ranges =3D ARRAY_SIZE(max77620_readable_ranges),\n" "> +};\n" "> +\n" - "> +static const struct regmap_range max20024_readable_ranges[] = {\n" + "> +static const struct regmap_range max20024_readable_ranges[] =3D {\n" "> +\tregmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4),\n" "> +\tregmap_reg_range(MAX20024_REG_MAX_ADD, MAX20024_REG_MAX_ADD),\n" "> +};\n" "> +\n" - "> +static const struct regmap_access_table max20024_readable_table = {\n" - "> +\t.yes_ranges = max20024_readable_ranges,\n" - "> +\t.n_yes_ranges = ARRAY_SIZE(max20024_readable_ranges),\n" + "> +static const struct regmap_access_table max20024_readable_table =3D {\n" + "> +\t.yes_ranges =3D max20024_readable_ranges,\n" + "> +\t.n_yes_ranges =3D ARRAY_SIZE(max20024_readable_ranges),\n" "> +};\n" "> +\n" - "> +static const struct regmap_range max77620_writable_ranges[] = {\n" + "> +static const struct regmap_range max77620_writable_ranges[] =3D {\n" "> +\tregmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4),\n" "> +};\n" "> +\n" - "> +static const struct regmap_access_table max77620_writable_table = {\n" - "> +\t.yes_ranges = max77620_writable_ranges,\n" - "> +\t.n_yes_ranges = ARRAY_SIZE(max77620_writable_ranges),\n" + "> +static const struct regmap_access_table max77620_writable_table =3D {\n" + "> +\t.yes_ranges =3D max77620_writable_ranges,\n" + "> +\t.n_yes_ranges =3D ARRAY_SIZE(max77620_writable_ranges),\n" "> +};\n" "> +\n" - "> +static const struct regmap_range max77620_cacheable_ranges[] = {\n" + "> +static const struct regmap_range max77620_cacheable_ranges[] =3D {\n" "> +\tregmap_reg_range(MAX77620_REG_SD0_CFG, MAX77620_REG_LDO_CFG3),\n" "> +\tregmap_reg_range(MAX77620_REG_FPS_CFG0, MAX77620_REG_FPS_SD3),\n" "> +};\n" "> +\n" - "> +static const struct regmap_access_table max77620_volatile_table = {\n" - "> +\t.no_ranges = max77620_cacheable_ranges,\n" - "> +\t.n_no_ranges = ARRAY_SIZE(max77620_cacheable_ranges),\n" + "> +static const struct regmap_access_table max77620_volatile_table =3D {\n" + "> +\t.no_ranges =3D max77620_cacheable_ranges,\n" + "> +\t.n_no_ranges =3D ARRAY_SIZE(max77620_cacheable_ranges),\n" "> +};\n" "> +\n" - "> +static const struct regmap_config max77620_regmap_config = {\n" - "> +\t.name = \"power-slave\",\n" - "> +\t.reg_bits = 8,\n" - "> +\t.val_bits = 8,\n" - "> +\t.max_register = MAX77620_REG_DVSSD4 + 1,\n" - "> +\t.cache_type = REGCACHE_RBTREE,\n" - "> +\t.rd_table = &max77620_readable_table,\n" - "> +\t.wr_table = &max77620_writable_table,\n" - "> +\t.volatile_table = &max77620_volatile_table,\n" + "> +static const struct regmap_config max77620_regmap_config =3D {\n" + "> +\t.name =3D \"power-slave\",\n" + "> +\t.reg_bits =3D 8,\n" + "> +\t.val_bits =3D 8,\n" + "> +\t.max_register =3D MAX77620_REG_DVSSD4 + 1,\n" + "> +\t.cache_type =3D REGCACHE_RBTREE,\n" + "> +\t.rd_table =3D &max77620_readable_table,\n" + "> +\t.wr_table =3D &max77620_writable_table,\n" + "> +\t.volatile_table =3D &max77620_volatile_table,\n" "> +};\n" "> +\n" - "> +static const struct regmap_config max20024_regmap_config = {\n" - "> +\t.name = \"power-slave\",\n" - "> +\t.reg_bits = 8,\n" - "> +\t.val_bits = 8,\n" - "> +\t.max_register = MAX20024_REG_MAX_ADD + 1,\n" - "> +\t.cache_type = REGCACHE_RBTREE,\n" - "> +\t.rd_table = &max20024_readable_table,\n" - "> +\t.wr_table = &max77620_writable_table,\n" - "> +\t.volatile_table = &max77620_volatile_table,\n" + "> +static const struct regmap_config max20024_regmap_config =3D {\n" + "> +\t.name =3D \"power-slave\",\n" + "> +\t.reg_bits =3D 8,\n" + "> +\t.val_bits =3D 8,\n" + "> +\t.max_register =3D MAX20024_REG_MAX_ADD + 1,\n" + "> +\t.cache_type =3D REGCACHE_RBTREE,\n" + "> +\t.rd_table =3D &max20024_readable_table,\n" + "> +\t.wr_table =3D &max77620_writable_table,\n" + "> +\t.volatile_table =3D &max77620_volatile_table,\n" "> +};\n" "> +\n" "> +int max77620_irq_get_virq(struct device *dev, int irq)\n" "> +{\n" - "> +\tstruct max77620_chip *chip = dev_get_drvdata(dev);\n" + "> +\tstruct max77620_chip *chip =3D dev_get_drvdata(dev);\n" "> +\n" "> +\treturn regmap_irq_get_virq(chip->top_irq_data, irq);\n" "> +}\n" "> +EXPORT_SYMBOL_GPL(max77620_irq_get_virq);\n" "> +\n" - "> +int max77620_reg_write(struct device *dev, unsigned int reg, unsigned int val)\n" + "> +int max77620_reg_write(struct device *dev, unsigned int reg, unsigned in=\n" + "t val)\n" "> +{\n" - "> +\tstruct max77620_chip *chip = dev_get_drvdata(dev);\n" + "> +\tstruct max77620_chip *chip =3D dev_get_drvdata(dev);\n" "> +\n" "> +\treturn regmap_write(chip->rmap, reg, val);\n" "> +}\n" "> +EXPORT_SYMBOL_GPL(max77620_reg_write);\n" "> +\n" - "> +int max77620_reg_read(struct device *dev, unsigned int reg, unsigned int *val)\n" + "> +int max77620_reg_read(struct device *dev, unsigned int reg, unsigned int=\n" + " *val)\n" "> +{\n" - "> +\tstruct max77620_chip *chip = dev_get_drvdata(dev);\n" + "> +\tstruct max77620_chip *chip =3D dev_get_drvdata(dev);\n" "> +\n" "> +\treturn regmap_read(chip->rmap, reg, val);\n" "> +}\n" @@ -417,7 +425,7 @@ "> +int max77620_reg_update(struct device *dev, unsigned int reg,\n" "> +\t\t\tunsigned int mask, unsigned int val)\n" "> +{\n" - "> +\tstruct max77620_chip *chip = dev_get_drvdata(dev);\n" + "> +\tstruct max77620_chip *chip =3D dev_get_drvdata(dev);\n" "> +\n" "> +\treturn regmap_update_bits(chip->rmap, reg, mask, val);\n" "> +}\n" @@ -430,12 +438,12 @@ "> +static int max77620_get_fps_period_reg_value(struct max77620_chip *chip,\n" "> +\t\t\t\t\t int tperiod)\n" "> +{\n" - "> +\tint base_fps_time = (chip->id == MAX20024) ? 20 : 40;\n" + "> +\tint base_fps_time =3D (chip->id =3D=3D MAX20024) ? 20 : 40;\n" "> +\tint x, i;\n" "> +\n" - "> +\tfor (i = 0; i < 0x7; ++i) {\n" - "> +\t\tx = base_fps_time * BIT(i);\n" - "> +\t\tif (x >= tperiod)\n" + "> +\tfor (i =3D 0; i < 0x7; ++i) {\n" + "> +\t\tx =3D base_fps_time * BIT(i);\n" + "> +\t\tif (x >=3D tperiod)\n" "> +\t\t\treturn i;\n" "> +\t}\n" "> +\n" @@ -445,13 +453,13 @@ "> +static int max77620_config_fps(struct max77620_chip *chip,\n" "> +\t\t\t struct device_node *fps_np)\n" "> +{\n" - "> +\tstruct device *dev = chip->dev;\n" - "> +\tunsigned int mask = 0, config = 0;\n" + "> +\tstruct device *dev =3D chip->dev;\n" + "> +\tunsigned int mask =3D 0, config =3D 0;\n" "> +\tu32 pval;\n" "> +\tint tperiod, fps_id;\n" "> +\tint ret;\n" "> +\n" - "> +\tfor (fps_id = 0; fps_id < MAX77620_FPS_COUNT; ++fps_id) {\n" + "> +\tfor (fps_id =3D 0; fps_id < MAX77620_FPS_COUNT; ++fps_id) {\n" "> +\t\tif (!strcmp(fps_np->name, of_max77620_fps_node_name[fps_id]))\n" "> +\t\t\tbreak;\n" "> +\t}\n" @@ -459,9 +467,9 @@ "Please see my comment at the declaration of of_max77620_fps_node_name\n" "for my suggestion.\n" "\n" - "> +\tif (fps_id == MAX77620_FPS_COUNT) {\n" + "> +\tif (fps_id =3D=3D MAX77620_FPS_COUNT) {\n" "\n" - ">=\n" + ">=3D\n" "\n" "> +\t\tdev_err(dev, \"FPS child name %s is not valid\\n\", fps_np->name);\n" "\n" @@ -470,7 +478,8 @@ "> +\t\treturn -EINVAL;\n" "> +\t}\n" "> +\n" - "> +\tret = of_property_read_u32(fps_np, \"maxim,shutdown-fps-time-period-us\",\n" + "> +\tret =3D of_property_read_u32(fps_np, \"maxim,shutdown-fps-time-period-us=\n" + "\",\n" "> +\t\t\t\t &pval);\n" "\n" "What's a pval?\n" @@ -478,22 +487,23 @@ "Do me that's a pointer to a value, which is not the case here.\n" "\n" "> +\tif (!ret) {\n" - "> +\t\tmask |= MAX77620_FPS_TIME_PERIOD_MASK;\n" - "> +\t\tchip->shutdown_fps_period[fps_id] = min(pval, 5120U);\n" - "> +\t\ttperiod = max77620_get_fps_period_reg_value(\n" + "> +\t\tmask |=3D MAX77620_FPS_TIME_PERIOD_MASK;\n" + "> +\t\tchip->shutdown_fps_period[fps_id] =3D min(pval, 5120U);\n" + "> +\t\ttperiod =3D max77620_get_fps_period_reg_value(\n" "> +\t\t\t\tchip, chip->shutdown_fps_period[fps_id]);\n" "\n" "Don't break lines after '('.\n" "\n" - "> +\t\tconfig |= tperiod << MAX77620_FPS_TIME_PERIOD_SHIFT;\n" + "> +\t\tconfig |=3D tperiod << MAX77620_FPS_TIME_PERIOD_SHIFT;\n" "> +\t}\n" "> +\n" - "> +\tret = of_property_read_u32(fps_np, \"maxim,suspend-fps-time-period-us\",\n" + "> +\tret =3D of_property_read_u32(fps_np, \"maxim,suspend-fps-time-period-us\"=\n" + ",\n" "> +\t\t\t\t &pval);\n" "> +\tif (!ret)\n" - "> +\t\tchip->suspend_fps_period[fps_id] = min(pval, 5120U);\n" + "> +\t\tchip->suspend_fps_period[fps_id] =3D min(pval, 5120U);\n" "> +\n" - "> +\tret = of_property_read_u32(fps_np, \"maxim,fps-control\", &pval);\n" + "> +\tret =3D of_property_read_u32(fps_np, \"maxim,fps-control\", &pval);\n" "> +\tif (!ret) {\n" "> +\t\tif (pval > 2) {\n" "> +\t\t\tdev_err(dev, \"FPS %d fps-control invalid\\n\", fps_id);\n" @@ -503,28 +513,28 @@ "Either return, or demote to dev_warn().\n" "\n" "> +\t\t} else {\n" - "> +\t\t\tmask |= MAX77620_FPS_EN_SRC_MASK;\n" - "> +\t\t\tconfig |= (pval & 0x3) << MAX77620_FPS_EN_SRC_SHIFT;\n" - "> +\t\t\tif (pval == 2) {\n" - "> +\t\t\t\tmask |= MAX77620_FPS_ENFPS_SW_MASK;\n" - "> +\t\t\t\tconfig |= MAX77620_FPS_ENFPS_SW;\n" + "> +\t\t\tmask |=3D MAX77620_FPS_EN_SRC_MASK;\n" + "> +\t\t\tconfig |=3D (pval & 0x3) << MAX77620_FPS_EN_SRC_SHIFT;\n" + "> +\t\t\tif (pval =3D=3D 2) {\n" + "> +\t\t\t\tmask |=3D MAX77620_FPS_ENFPS_SW_MASK;\n" + "> +\t\t\t\tconfig |=3D MAX77620_FPS_ENFPS_SW;\n" "> +\t\t\t}\n" "> +\t\t}\n" "> +\t}\n" "> +\n" "> +\tif (!chip->sleep_enable)\n" - "> +\t\tchip->sleep_enable = of_property_read_bool(fps_np,\n" + "> +\t\tchip->sleep_enable =3D of_property_read_bool(fps_np,\n" "> +\t\t\t\t\t\"maxim,enable-sleep\");\n" "\n" - "Better to break at the '=' here.\n" + "Better to break at the '=3D' here.\n" "\n" "> +\tif (!chip->enable_global_lpm)\n" - "> +\t\tchip->enable_global_lpm = of_property_read_bool(fps_np,\n" + "> +\t\tchip->enable_global_lpm =3D of_property_read_bool(fps_np,\n" "> +\t\t\t\t\t\"maxim,enable-global-lpm\");\n" "\n" "Same here.\n" "\n" - "> +\tret = max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id,\n" + "> +\tret =3D max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id,\n" "> +\t\t\t\t mask, config);\n" "> +\tif (ret < 0) {\n" "> +\t\tdev_err(dev, \"Reg 0x%02x update failed: %d\\n\",\n" @@ -543,28 +553,29 @@ "> +\tint fps_id;\n" "> +\tint ret;\n" "> +\n" - "> +\tfor (fps_id = 0; fps_id < 3; ++fps_id) {\n" + "> +\tfor (fps_id =3D 0; fps_id < 3; ++fps_id) {\n" "\n" "MAX77620_FPS_COUNT\n" "\n" "fps_id++\n" "\n" - "> +\t\tchip->shutdown_fps_period[fps_id] = -1;\n" - "> +\t\tchip->suspend_fps_period[fps_id] = -1;\n" + "> +\t\tchip->shutdown_fps_period[fps_id] =3D -1;\n" + "> +\t\tchip->suspend_fps_period[fps_id] =3D -1;\n" "> +\t}\n" "> +\n" - "> +\tfps_np = of_get_child_by_name(dev->of_node, \"fps\");\n" + "> +\tfps_np =3D of_get_child_by_name(dev->of_node, \"fps\");\n" "> +\tif (!fps_np)\n" "> +\t\tgoto skip_fps;\n" "> +\n" "> +\tfor_each_child_of_node(fps_np, fps_child) {\n" - "> +\t\tret = max77620_config_fps(chip, fps_child);\n" + "> +\t\tret =3D max77620_config_fps(chip, fps_child);\n" "> +\t\tif (ret < 0)\n" "> +\t\t\treturn ret;\n" "> +\t}\n" "> +\n" - "> +\tconfig = chip->enable_global_lpm ? MAX77620_ONOFFCNFG2_SLP_LPM_MSK : 0;\n" - "> +\tret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" + "> +\tconfig =3D chip->enable_global_lpm ? MAX77620_ONOFFCNFG2_SLP_LPM_MSK : =\n" + "0;\n" + "> +\tret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG2_SLP_LPM_MSK, config);\n" "> +\tif (ret < 0) {\n" "> +\t\tdev_err(dev, \"Reg ONOFFCNFG2 update failed: %d\\n\", ret);\n" @@ -573,7 +584,7 @@ "> +\n" "> +skip_fps:\n" "> +\t/* Enable wake on EN0 pin */\n" - "> +\tret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" + "> +\tret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG2_WK_EN0,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG2_WK_EN0);\n" "> +\tif (ret < 0) {\n" @@ -582,13 +593,13 @@ "> +\t}\n" "> +\n" "> +\tif (!chip->sleep_enable)\n" - "> +\t\tchip->sleep_enable = of_property_read_bool(dev->of_node,\n" + "> +\t\tchip->sleep_enable =3D of_property_read_bool(dev->of_node,\n" "> +\t\t\t\t\t\t\"maxim,enable-sleep\");\n" "> +\n" "> +\t/* For MAX20024, SLPEN will be POR reset if CLRSE is b11 */\n" - "> +\tif ((chip->id == MAX20024) && chip->sleep_enable) {\n" - "> +\t\tconfig = MAX77620_ONOFFCNFG1_SLPEN | MAX20024_ONOFFCNFG1_CLRSE;\n" - "> +\t\tret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1,\n" + "> +\tif ((chip->id =3D=3D MAX20024) && chip->sleep_enable) {\n" + "> +\t\tconfig =3D MAX77620_ONOFFCNFG1_SLPEN | MAX20024_ONOFFCNFG1_CLRSE;\n" + "> +\t\tret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1,\n" "> +\t\t\t\t\t config, config);\n" "> +\t\tif (ret < 0) {\n" "> +\t\t\tdev_err(dev, \"Reg ONOFFCNFG1 update failed: %d\\n\", ret);\n" @@ -602,26 +613,27 @@ "> +static int max77620_initialise_chip(struct max77620_chip *chip,\n" "> +\t\t\t\t struct device *dev)\n" "> +{\n" - "> +\tstruct device_node *np = dev->of_node;\n" - "> +\tu32 mrt_time = 0;\n" + "> +\tstruct device_node *np =3D dev->of_node;\n" + "> +\tu32 mrt_time =3D 0;\n" "> +\tu8 reg_val;\n" "> +\tint ret;\n" "> +\n" - "> +\tret = of_property_read_u32(np, \"maxim,hard-power-off-time\", &mrt_time);\n" + "> +\tret =3D of_property_read_u32(np, \"maxim,hard-power-off-time\", &mrt_time=\n" + ");\n" "> +\tif (ret < 0)\n" "> +\t\treturn 0;\n" "> +\n" - "> +\tmrt_time = (mrt_time > 12) ? 12 : mrt_time;\n" - "> +\tif (mrt_time <= 6)\n" - "> +\t\treg_val = mrt_time - 2;\n" + "> +\tmrt_time =3D (mrt_time > 12) ? 12 : mrt_time;\n" + "> +\tif (mrt_time <=3D 6)\n" + "> +\t\treg_val =3D mrt_time - 2;\n" "> +\telse\n" - "> +\t\treg_val = (mrt_time - 6) / 2 + 4;\n" + "> +\t\treg_val =3D (mrt_time - 6) / 2 + 4;\n" "\n" "These need defining.\n" "\n" - "> +\treg_val <<= MAX77620_ONOFFCNFG1_MRT_SHIFT;\n" + "> +\treg_val <<=3D MAX77620_ONOFFCNFG1_MRT_SHIFT;\n" "> +\n" - "> +\tret = max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG1,\n" + "> +\tret =3D max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG1,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG1_MRT_MASK, reg_val);\n" "> +\tif (ret < 0) {\n" "> +\t\tdev_err(dev, \"REG ONOFFCNFG1 update failed: %d\\n\", ret);\n" @@ -629,7 +641,7 @@ "> +\t}\n" "> +\n" "> +\t/* Disable alarm wake to enable sleep from EN input signal */\n" - "> +\tret = max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG2,\n" + "> +\tret =3D max77620_reg_update(dev, MAX77620_REG_ONOFFCNFG2,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG2_WK_ALARM1, 0);\n" "> +\tif (ret < 0) {\n" "> +\t\tdev_err(dev, \"REG ONOFFCNFG2 update failed: %d\\n\", ret);\n" @@ -646,11 +658,11 @@ "> +\tint i;\n" "> +\tint ret;\n" "> +\n" - "> +\tfor (i = MAX77620_REG_CID0; i <= MAX77620_REG_CID5; ++i) {\n" + "> +\tfor (i =3D MAX77620_REG_CID0; i <=3D MAX77620_REG_CID5; ++i) {\n" "\n" "i++\n" "\n" - "> +\t\tret = max77620_reg_read(chip->dev, i, &val);\n" + "> +\t\tret =3D max77620_reg_read(chip->dev, i, &val);\n" "> +\t\tif (ret < 0) {\n" "> +\t\t\tdev_err(chip->dev, \"CID%d register read failed: %d\\n\",\n" "> +\t\t\t\ti - MAX77620_REG_CID0, ret);\n" @@ -659,7 +671,7 @@ "\n" "> +\t\tdev_dbg(chip->dev, \"CID%d: 0x%02x\\n\",\n" "> +\t\t\ti - MAX77620_REG_CID0, val);\n" - "> +\t\tcid_val[i - MAX77620_REG_CID0] = val;\n" + "> +\t\tcid_val[i - MAX77620_REG_CID0] =3D val;\n" "> +\t}\n" "> +\n" "> +\t/* CID4 is OTP Version and CID5 is ES version */\n" @@ -672,61 +684,61 @@ "> +static int max77620_probe(struct i2c_client *client,\n" "> +\t\t\t const struct i2c_device_id *id)\n" "> +{\n" - "> +\tstruct device_node *node = client->dev.of_node;\n" + "> +\tstruct device_node *node =3D client->dev.of_node;\n" "\n" "You've used 'np' before, which also happens to be my preference.\n" "\n" "> +\tconst struct max77620_sub_modules *children;\n" - "> +\tconst struct regmap_config *rmap_config = &max77620_regmap_config;\n" + "> +\tconst struct regmap_config *rmap_config =3D &max77620_regmap_config;\n" "> +\tstruct max77620_chip *chip;\n" - "> +\tint ret = 0;\n" + "> +\tint ret =3D 0;\n" "> +\n" "> +\tif (!node) {\n" "> +\t\tdev_err(&client->dev, \"Device is not from DT\\n\");\n" "> +\t\treturn -ENODEV;\n" "> +\t}\n" "> +\n" - "> +\tchildren = of_device_get_match_data(&client->dev);\n" + "> +\tchildren =3D of_device_get_match_data(&client->dev);\n" "> +\tif (!children)\n" "> +\t\treturn -ENODEV;\n" "> +\n" - "> +\tchip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);\n" + "> +\tchip =3D devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);\n" "> +\tif (!chip)\n" "> +\t\treturn -ENOMEM;\n" "> +\n" "> +\ti2c_set_clientdata(client, chip);\n" - "> +\tchip->dev = &client->dev;\n" - "> +\tchip->irq_base = -1;\n" - "> +\tchip->chip_irq = client->irq;\n" - "> +\tchip->id = children->id;\n" - "> +\tchip->base_client = client;\n" + "> +\tchip->dev =3D &client->dev;\n" + "> +\tchip->irq_base =3D -1;\n" + "> +\tchip->chip_irq =3D client->irq;\n" + "> +\tchip->id =3D children->id;\n" + "> +\tchip->base_client =3D client;\n" "\n" "You don't need client AND client->dev AND client->irq.\n" "\n" "If you have one, you have them all, please the superfluous\n" "attributes.\n" "\n" - "> +\tif (chip->id == MAX20024)\n" - "> +\t\trmap_config = &max20024_regmap_config;\n" + "> +\tif (chip->id =3D=3D MAX20024)\n" + "> +\t\trmap_config =3D &max20024_regmap_config;\n" "> +\n" - "> +\tchip->rmap = devm_regmap_init_i2c(chip->base_client, rmap_config);\n" + "> +\tchip->rmap =3D devm_regmap_init_i2c(chip->base_client, rmap_config);\n" "> +\tif (IS_ERR(chip->rmap)) {\n" - "> +\t\tret = PTR_ERR(chip->rmap);\n" + "> +\t\tret =3D PTR_ERR(chip->rmap);\n" "> +\t\tdev_err(&client->dev, \"regmap init failed %d\\n\", ret);\n" "> +\t\treturn ret;\n" "> +\t}\n" "> +\n" "> +\tmutex_init(&chip->mutex_config);\n" "> +\n" - "> +\tret = max77620_read_es_version(chip);\n" + "> +\tret =3D max77620_read_es_version(chip);\n" "> +\tif (ret < 0)\n" "> +\t\treturn ret;\n" "> +\n" - "> +\tret = max77620_initialise_chip(chip, &client->dev);\n" + "> +\tret =3D max77620_initialise_chip(chip, &client->dev);\n" "> +\tif (ret < 0)\n" "> +\t\treturn ret;\n" "> +\n" - "> +\tret = regmap_add_irq_chip(chip->rmap, chip->chip_irq,\n" + "> +\tret =3D regmap_add_irq_chip(chip->rmap, chip->chip_irq,\n" "> +\t\t\t\t IRQF_ONESHOT | IRQF_SHARED,\n" "> +\t\t\t\t chip->irq_base, &max77620_top_irq_chip,\n" "> +\t\t\t\t &chip->top_irq_data);\n" @@ -737,11 +749,11 @@ "\n" "What do you mean by 'top'?\n" "\n" - "> +\tret = max77620_initialise_fps(chip, &client->dev);\n" + "> +\tret =3D max77620_initialise_fps(chip, &client->dev);\n" "> +\tif (ret < 0)\n" "> +\t\tgoto fail_free_irq;\n" "> +\n" - "> +\tret = mfd_add_devices(&client->dev, -1, children->cells,\n" + "> +\tret =3D mfd_add_devices(&client->dev, -1, children->cells,\n" "\n" "Please use the PLATFORM_DEVID_ defines.\n" "\n" @@ -765,7 +777,7 @@ "> +\n" "> +static int max77620_remove(struct i2c_client *client)\n" "> +{\n" - "> +\tstruct max77620_chip *chip = i2c_get_clientdata(client);\n" + "> +\tstruct max77620_chip *chip =3D i2c_get_clientdata(client);\n" "> +\n" "> +\tmfd_remove_devices(chip->dev);\n" "> +\tregmap_del_irq_chip(chip->chip_irq, chip->top_irq_data);\n" @@ -777,11 +789,11 @@ "> +static int max77620_set_fps_period(struct max77620_chip *chip,\n" "> +\t\t\t\t int fps_id, int time_period)\n" "> +{\n" - "> +\tstruct device *dev = chip->dev;\n" - "> +\tint period = max77620_get_fps_period_reg_value(chip, time_period);\n" + "> +\tstruct device *dev =3D chip->dev;\n" + "> +\tint period =3D max77620_get_fps_period_reg_value(chip, time_period);\n" "> +\tint ret;\n" "> +\n" - "> +\tret = max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id,\n" + "> +\tret =3D max77620_reg_update(dev, MAX77620_REG_FPS_CFG0 + fps_id,\n" "> +\t\t\t\t MAX77620_FPS_TIME_PERIOD_MASK,\n" "> +\t\t\t\t period << MAX77620_FPS_TIME_PERIOD_SHIFT);\n" "> +\tif (ret < 0) {\n" @@ -795,16 +807,16 @@ "> +\n" "> +static int max77620_i2c_suspend(struct device *dev)\n" "> +{\n" - "> +\tstruct max77620_chip *chip = dev_get_drvdata(dev);\n" + "> +\tstruct max77620_chip *chip =3D dev_get_drvdata(dev);\n" "> +\tunsigned int config;\n" "> +\tint fps;\n" "> +\tint ret;\n" "> +\n" - "> +\tfor (fps = 0; fps < 2; ++fps) {\n" + "> +\tfor (fps =3D 0; fps < 2; ++fps) {\n" "> +\t\tif (chip->suspend_fps_period[fps] < 0)\n" "> +\t\t\tcontinue;\n" "> +\n" - "> +\t\tret = max77620_set_fps_period(chip, fps,\n" + "> +\t\tret =3D max77620_set_fps_period(chip, fps,\n" "> +\t\t\t\t\t chip->suspend_fps_period[fps]);\n" "> +\t\tif (ret < 0)\n" "> +\t\t\tdev_err(dev, \"FPS%d config failed: %d\\n\", fps, ret);\n" @@ -814,11 +826,11 @@ "> +\t * For MAX20024: No need to configure SLPEN on suspend as\n" "> +\t * it will be configured on Init.\n" "> +\t */\n" - "> +\tif (chip->id == MAX20024)\n" + "> +\tif (chip->id =3D=3D MAX20024)\n" "> +\t\tgoto out;\n" "> +\n" - "> +\tconfig = (chip->sleep_enable) ? MAX77620_ONOFFCNFG1_SLPEN : 0;\n" - "> +\tret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1,\n" + "> +\tconfig =3D (chip->sleep_enable) ? MAX77620_ONOFFCNFG1_SLPEN : 0;\n" + "> +\tret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG1,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG1_SLPEN,\n" "> +\t\t\t\t config);\n" "> +\tif (ret < 0) {\n" @@ -827,7 +839,7 @@ "> +\t}\n" "> +\n" "> +\t/* Disable WK_EN0 */\n" - "> +\tret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" + "> +\tret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG2_WK_EN0, 0);\n" "> +\tif (ret < 0) {\n" "> +\t\tdev_err(dev, \"Reg ONOFFCNFG2 WK_EN0 update failed: %d\\n\", ret);\n" @@ -842,15 +854,15 @@ "> +\n" "> +static int max77620_i2c_resume(struct device *dev)\n" "> +{\n" - "> +\tstruct max77620_chip *chip = dev_get_drvdata(dev);\n" + "> +\tstruct max77620_chip *chip =3D dev_get_drvdata(dev);\n" "> +\tint ret;\n" "> +\tint fps;\n" "> +\n" - "> +\tfor (fps = 0; fps < 2; ++fps) {\n" + "> +\tfor (fps =3D 0; fps < 2; ++fps) {\n" "> +\t\tif (chip->shutdown_fps_period[fps] < 0)\n" "> +\t\t\tcontinue;\n" "> +\n" - "> +\t\tret = max77620_set_fps_period(chip, fps,\n" + "> +\t\tret =3D max77620_set_fps_period(chip, fps,\n" "> +\t\t\t\t\t chip->shutdown_fps_period[fps]);\n" "> +\t\tif (ret < 0)\n" "> +\t\t\tdev_err(dev, \"FPS%d config failed: %d\\n\", fps, ret);\n" @@ -860,11 +872,11 @@ "> +\t * For MAX20024: No need to configure WKEN0 on resume as\n" "> +\t * it is configured on Init.\n" "> +\t */\n" - "> +\tif (chip->id == MAX20024)\n" + "> +\tif (chip->id =3D=3D MAX20024)\n" "> +\t\tgoto out;\n" "> +\n" "> +\t/* Enable WK_EN0 */\n" - "> +\tret = max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" + "> +\tret =3D max77620_reg_update(chip->dev, MAX77620_REG_ONOFFCNFG2,\n" "> +\t\t\t\t MAX77620_ONOFFCNFG2_WK_EN0,\n" "> +\t\tMAX77620_ONOFFCNFG2_WK_EN0);\n" "> +\tif (ret < 0) {\n" @@ -879,20 +891,20 @@ "> +}\n" "> +#endif\n" "> +\n" - "> +static const struct i2c_device_id max77620_id[] = {\n" + "> +static const struct i2c_device_id max77620_id[] =3D {\n" "> +\t{\"max77620\", MAX77620},\n" "> +\t{\"max20024\", MAX20024},\n" "> +\t{},\n" "> +};\n" "> +MODULE_DEVICE_TABLE(i2c, max77620_id);\n" "> +\n" - "> +static const struct of_device_id max77620_of_match[] = {\n" + "> +static const struct of_device_id max77620_of_match[] =3D {\n" "> +\t{\n" - "> +\t\t.compatible = \"maxim,max77620\",\n" - "> +\t\t.data = &max77620_cells,\n" + "> +\t\t.compatible =3D \"maxim,max77620\",\n" + "> +\t\t.data =3D &max77620_cells,\n" "> +\t}, {\n" - "> +\t\t.compatible = \"maxim,max20024\",\n" - "> +\t\t.data = &max20024_cells,\n" + "> +\t\t.compatible =3D \"maxim,max20024\",\n" + "> +\t\t.data =3D &max20024_cells,\n" "> +\t}, {\n" "> +\t},\n" "> +};\n" @@ -901,24 +913,25 @@ "This is not acceptable. EITHER use DT OR MFD methods of registering\n" "devices, do not mix the two.\n" "\n" - "> +static const struct dev_pm_ops max77620_pm_ops = {\n" + "> +static const struct dev_pm_ops max77620_pm_ops =3D {\n" "> +\tSET_SYSTEM_SLEEP_PM_OPS(max77620_i2c_suspend, max77620_i2c_resume)\n" "> +};\n" "> +\n" - "> +static struct i2c_driver max77620_driver = {\n" - "> +\t.driver = {\n" - "> +\t\t.name = \"max77620\",\n" - "> +\t\t.pm = &max77620_pm_ops,\n" - "> +\t\t.of_match_table = max77620_of_match,\n" + "> +static struct i2c_driver max77620_driver =3D {\n" + "> +\t.driver =3D {\n" + "> +\t\t.name =3D \"max77620\",\n" + "> +\t\t.pm =3D &max77620_pm_ops,\n" + "> +\t\t.of_match_table =3D max77620_of_match,\n" "> +\t},\n" - "> +\t.probe = max77620_probe,\n" - "> +\t.remove = max77620_remove,\n" - "> +\t.id_table = max77620_id,\n" + "> +\t.probe =3D max77620_probe,\n" + "> +\t.remove =3D max77620_remove,\n" + "> +\t.id_table =3D max77620_id,\n" "> +};\n" "> +\n" "> +module_i2c_driver(max77620_driver);\n" "> +\n" - "> +MODULE_DESCRIPTION(\"MAX77620/MAX20024 Multi Function Device Core Driver\");\n" + "> +MODULE_DESCRIPTION(\"MAX77620/MAX20024 Multi Function Device Core Driver\"=\n" + ");\n" "> +MODULE_AUTHOR(\"Laxman Dewangan <ldewangan@nvidia.com>\");\n" "> +MODULE_AUTHOR(\"Chaitanya Bandi <bandik@nvidia.com>\");\n" "> +MODULE_AUTHOR(\"Mallikarjun Kasoju <mkasoju@nvidia.com>\");\n" @@ -939,13 +952,16 @@ "> + *\n" "> + * Copyright (C) 2016 NVIDIA CORPORATION. All rights reserved.\n" "> + *\n" - "> + * This program is free software; you can redistribute it and/or modify it\n" + "> + * This program is free software; you can redistribute it and/or modify =\n" + "it\n" "> + * under the terms and conditions of the GNU General Public License,\n" "> + * version 2, as published by the Free Software Foundation.\n" "> + *\n" - "> + * This program is distributed in the hope it will be useful, but WITHOUT\n" + "> + * This program is distributed in the hope it will be useful, but WITHOU=\n" + "T\n" "> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n" - "> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n" + "> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License=\n" + " for\n" "> + * more details.\n" "> + */\n" "\n" @@ -1342,10 +1358,23 @@ "> +\t\tunsigned int mask, unsigned int val);\n" "> +#endif /* _LINUX_MFD_MAX77620_H_ */\n" "\n" - "-- \n" + "--=20\n" "Lee Jones\n" "Linaro STMicroelectronics Landing Team Lead\n" - "Linaro.org \342\224\202 Open source software for ARM SoCs\n" - Follow Linaro: Facebook | Twitter | Blog + "Linaro.org =E2=94=82 Open source software for ARM SoCs\n" + "Follow Linaro: Facebook | Twitter | Blog\n" + "\n" + "--=20\n" + "--=20\n" + "You received this message because you are subscribed to \"rtc-linux\".\n" + "Membership options at http://groups.google.com/group/rtc-linux .\n" + "Please read http://groups.google.com/group/rtc-linux/web/checklist\n" + "before submitting a driver.\n" + "---=20\n" + "You received this message because you are subscribed to the Google Groups \"=\n" + "rtc-linux\" group.\n" + "To unsubscribe from this group and stop receiving emails from it, send an e=\n" + "mail to rtc-linux+unsubscribe@googlegroups.com.\n" + For more options, visit https://groups.google.com/d/optout. -2e4479bed6b6a6bee68a36fa0a4180c1c14dcf61c0f1fbf3650704558aa60d89 +fb30421efee08b885636a742d6df4aa815d8b59a56d147e962c53c435836e980
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.