Re: [PATCHv5 1/3] mfd: sec-core: Add support for S2MPU02 device
Hi Lee, On 06/16/2014 10:03 PM, Lee Jones wrote: > On Mon, 16 Jun 2014, Chanwoo Choi wrote: > >> Add support for Samsung S2MPU02 PMIC device to the MFD sec-core driver. >> The S2MPU02 device includes PMIC/RTC/Clock devices. >> >> Signed-off-by: Chanwoo Choi >> Reviewed-by: Krzysztof Kozlowski >> --- >> drivers/mfd/sec-core.c | 19 + >> drivers/mfd/sec-irq.c| 88 >> >> include/linux/mfd/samsung/core.h | 1 + >> include/linux/mfd/samsung/irq.h | 24 +++ >> 4 files changed, 132 insertions(+) >> >> diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c >> index be06d0a..5e8784b 100644 >> --- a/drivers/mfd/sec-core.c >> +++ b/drivers/mfd/sec-core.c >> @@ -89,6 +89,17 @@ static const struct mfd_cell s2mpa01_devs[] = { >> }, >> }; >> >> +static const struct mfd_cell s2mpu02_devs[] = { >> +{ >> +.name = "s2mpu02-pmic", >> +}, { >> +.name = "s2mpu02-rtc", > > Make these two one liners, so: > > { .name = "s2mpu02-pmic" }, > { .name = "s2mpu02-rtc" ), OK, I'll modify it. > >> +}, { >> +.name = "s2mpu02-clk", >> +.of_compatible = "samsung,s2mpu02-clk", >> +} >> +}; >> + >> #ifdef CONFIG_OF >> static const struct of_device_id sec_dt_match[] = { >> { .compatible = "samsung,s5m8767-pmic", >> @@ -103,6 +114,9 @@ static const struct of_device_id sec_dt_match[] = { >> .compatible = "samsung,s2mpa01-pmic", >> .data = (void *)S2MPA01, >> }, { >> +.compatible = "samsung,s2mpu02-pmic", >> +.data = (void *)S2MPU02, >> +}, { >> /* Sentinel */ >> }, >> }; >> @@ -342,6 +356,11 @@ static int sec_pmic_probe(struct i2c_client *i2c, >> ret = mfd_add_devices(sec_pmic->dev, -1, s2mps14_devs, >>ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL); >> break; >> +case S2MPU02: >> +ret = mfd_add_devices(sec_pmic->dev, -1, s2mpu02_devs, >> + ARRAY_SIZE(s2mpu02_devs), NULL, 0, NULL); >> +break; > > This is a bit bonkers. Instead of passing S2MPU02, why don't you pass > a new container which holds s2mpu02_devs and s2mpu02_irq_chip, then > you won't need new mfd_add_devices() and regmap_add_irq_chip() calls > for every device you want to support. OK, I'll remove duplicate code of mfd_add_devices() and regmap_add_irq_chip(). Best Regards, Chanwoo Choi -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCHv5 1/3] mfd: sec-core: Add support for S2MPU02 device
On Mon, 16 Jun 2014, Chanwoo Choi wrote: > Add support for Samsung S2MPU02 PMIC device to the MFD sec-core driver. > The S2MPU02 device includes PMIC/RTC/Clock devices. > > Signed-off-by: Chanwoo Choi > Reviewed-by: Krzysztof Kozlowski > --- > drivers/mfd/sec-core.c | 19 + > drivers/mfd/sec-irq.c| 88 > > include/linux/mfd/samsung/core.h | 1 + > include/linux/mfd/samsung/irq.h | 24 +++ > 4 files changed, 132 insertions(+) > > diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c > index be06d0a..5e8784b 100644 > --- a/drivers/mfd/sec-core.c > +++ b/drivers/mfd/sec-core.c > @@ -89,6 +89,17 @@ static const struct mfd_cell s2mpa01_devs[] = { > }, > }; > > +static const struct mfd_cell s2mpu02_devs[] = { > + { > + .name = "s2mpu02-pmic", > + }, { > + .name = "s2mpu02-rtc", Make these two one liners, so: { .name = "s2mpu02-pmic" }, { .name = "s2mpu02-rtc" ), > + }, { > + .name = "s2mpu02-clk", > + .of_compatible = "samsung,s2mpu02-clk", > + } > +}; > + > #ifdef CONFIG_OF > static const struct of_device_id sec_dt_match[] = { > { .compatible = "samsung,s5m8767-pmic", > @@ -103,6 +114,9 @@ static const struct of_device_id sec_dt_match[] = { > .compatible = "samsung,s2mpa01-pmic", > .data = (void *)S2MPA01, > }, { > + .compatible = "samsung,s2mpu02-pmic", > + .data = (void *)S2MPU02, > + }, { > /* Sentinel */ > }, > }; > @@ -342,6 +356,11 @@ static int sec_pmic_probe(struct i2c_client *i2c, > ret = mfd_add_devices(sec_pmic->dev, -1, s2mps14_devs, > ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL); > break; > + case S2MPU02: > + ret = mfd_add_devices(sec_pmic->dev, -1, s2mpu02_devs, > + ARRAY_SIZE(s2mpu02_devs), NULL, 0, NULL); > + break; This is a bit bonkers. Instead of passing S2MPU02, why don't you pass a new container which holds s2mpu02_devs and s2mpu02_irq_chip, then you won't need new mfd_add_devices() and regmap_add_irq_chip() calls for every device you want to support. [...] -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCHv5 1/3] mfd: sec-core: Add support for S2MPU02 device
On Mon, 16 Jun 2014, Chanwoo Choi wrote: Add support for Samsung S2MPU02 PMIC device to the MFD sec-core driver. The S2MPU02 device includes PMIC/RTC/Clock devices. Signed-off-by: Chanwoo Choi cw00.c...@samsung.com Reviewed-by: Krzysztof Kozlowski k.kozlow...@samsung.com --- drivers/mfd/sec-core.c | 19 + drivers/mfd/sec-irq.c| 88 include/linux/mfd/samsung/core.h | 1 + include/linux/mfd/samsung/irq.h | 24 +++ 4 files changed, 132 insertions(+) diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c index be06d0a..5e8784b 100644 --- a/drivers/mfd/sec-core.c +++ b/drivers/mfd/sec-core.c @@ -89,6 +89,17 @@ static const struct mfd_cell s2mpa01_devs[] = { }, }; +static const struct mfd_cell s2mpu02_devs[] = { + { + .name = s2mpu02-pmic, + }, { + .name = s2mpu02-rtc, Make these two one liners, so: { .name = s2mpu02-pmic }, { .name = s2mpu02-rtc ), + }, { + .name = s2mpu02-clk, + .of_compatible = samsung,s2mpu02-clk, + } +}; + #ifdef CONFIG_OF static const struct of_device_id sec_dt_match[] = { { .compatible = samsung,s5m8767-pmic, @@ -103,6 +114,9 @@ static const struct of_device_id sec_dt_match[] = { .compatible = samsung,s2mpa01-pmic, .data = (void *)S2MPA01, }, { + .compatible = samsung,s2mpu02-pmic, + .data = (void *)S2MPU02, + }, { /* Sentinel */ }, }; @@ -342,6 +356,11 @@ static int sec_pmic_probe(struct i2c_client *i2c, ret = mfd_add_devices(sec_pmic-dev, -1, s2mps14_devs, ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL); break; + case S2MPU02: + ret = mfd_add_devices(sec_pmic-dev, -1, s2mpu02_devs, + ARRAY_SIZE(s2mpu02_devs), NULL, 0, NULL); + break; This is a bit bonkers. Instead of passing S2MPU02, why don't you pass a new container which holds s2mpu02_devs and s2mpu02_irq_chip, then you won't need new mfd_add_devices() and regmap_add_irq_chip() calls for every device you want to support. [...] -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCHv5 1/3] mfd: sec-core: Add support for S2MPU02 device
Hi Lee, On 06/16/2014 10:03 PM, Lee Jones wrote: On Mon, 16 Jun 2014, Chanwoo Choi wrote: Add support for Samsung S2MPU02 PMIC device to the MFD sec-core driver. The S2MPU02 device includes PMIC/RTC/Clock devices. Signed-off-by: Chanwoo Choi cw00.c...@samsung.com Reviewed-by: Krzysztof Kozlowski k.kozlow...@samsung.com --- drivers/mfd/sec-core.c | 19 + drivers/mfd/sec-irq.c| 88 include/linux/mfd/samsung/core.h | 1 + include/linux/mfd/samsung/irq.h | 24 +++ 4 files changed, 132 insertions(+) diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c index be06d0a..5e8784b 100644 --- a/drivers/mfd/sec-core.c +++ b/drivers/mfd/sec-core.c @@ -89,6 +89,17 @@ static const struct mfd_cell s2mpa01_devs[] = { }, }; +static const struct mfd_cell s2mpu02_devs[] = { +{ +.name = s2mpu02-pmic, +}, { +.name = s2mpu02-rtc, Make these two one liners, so: { .name = s2mpu02-pmic }, { .name = s2mpu02-rtc ), OK, I'll modify it. +}, { +.name = s2mpu02-clk, +.of_compatible = samsung,s2mpu02-clk, +} +}; + #ifdef CONFIG_OF static const struct of_device_id sec_dt_match[] = { { .compatible = samsung,s5m8767-pmic, @@ -103,6 +114,9 @@ static const struct of_device_id sec_dt_match[] = { .compatible = samsung,s2mpa01-pmic, .data = (void *)S2MPA01, }, { +.compatible = samsung,s2mpu02-pmic, +.data = (void *)S2MPU02, +}, { /* Sentinel */ }, }; @@ -342,6 +356,11 @@ static int sec_pmic_probe(struct i2c_client *i2c, ret = mfd_add_devices(sec_pmic-dev, -1, s2mps14_devs, ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL); break; +case S2MPU02: +ret = mfd_add_devices(sec_pmic-dev, -1, s2mpu02_devs, + ARRAY_SIZE(s2mpu02_devs), NULL, 0, NULL); +break; This is a bit bonkers. Instead of passing S2MPU02, why don't you pass a new container which holds s2mpu02_devs and s2mpu02_irq_chip, then you won't need new mfd_add_devices() and regmap_add_irq_chip() calls for every device you want to support. OK, I'll remove duplicate code of mfd_add_devices() and regmap_add_irq_chip(). Best Regards, Chanwoo Choi -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCHv5 1/3] mfd: sec-core: Add support for S2MPU02 device
Add support for Samsung S2MPU02 PMIC device to the MFD sec-core driver. The S2MPU02 device includes PMIC/RTC/Clock devices. Signed-off-by: Chanwoo Choi Reviewed-by: Krzysztof Kozlowski --- drivers/mfd/sec-core.c | 19 + drivers/mfd/sec-irq.c| 88 include/linux/mfd/samsung/core.h | 1 + include/linux/mfd/samsung/irq.h | 24 +++ 4 files changed, 132 insertions(+) diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c index be06d0a..5e8784b 100644 --- a/drivers/mfd/sec-core.c +++ b/drivers/mfd/sec-core.c @@ -89,6 +89,17 @@ static const struct mfd_cell s2mpa01_devs[] = { }, }; +static const struct mfd_cell s2mpu02_devs[] = { + { + .name = "s2mpu02-pmic", + }, { + .name = "s2mpu02-rtc", + }, { + .name = "s2mpu02-clk", + .of_compatible = "samsung,s2mpu02-clk", + } +}; + #ifdef CONFIG_OF static const struct of_device_id sec_dt_match[] = { { .compatible = "samsung,s5m8767-pmic", @@ -103,6 +114,9 @@ static const struct of_device_id sec_dt_match[] = { .compatible = "samsung,s2mpa01-pmic", .data = (void *)S2MPA01, }, { + .compatible = "samsung,s2mpu02-pmic", + .data = (void *)S2MPU02, + }, { /* Sentinel */ }, }; @@ -342,6 +356,11 @@ static int sec_pmic_probe(struct i2c_client *i2c, ret = mfd_add_devices(sec_pmic->dev, -1, s2mps14_devs, ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL); break; + case S2MPU02: + ret = mfd_add_devices(sec_pmic->dev, -1, s2mpu02_devs, + ARRAY_SIZE(s2mpu02_devs), NULL, 0, NULL); + break; + default: /* If this happens the probe function is problem */ BUG(); diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c index 654e2c1..0cabd03 100644 --- a/drivers/mfd/sec-irq.c +++ b/drivers/mfd/sec-irq.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -161,6 +162,77 @@ static const struct regmap_irq s2mps14_irqs[] = { }, }; +static const struct regmap_irq s2mpu02_irqs[] = { + [S2MPU02_IRQ_PWRONF] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_PWRONF_MASK, + }, + [S2MPU02_IRQ_PWRONR] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_PWRONR_MASK, + }, + [S2MPU02_IRQ_JIGONBF] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_JIGONBF_MASK, + }, + [S2MPU02_IRQ_JIGONBR] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_JIGONBR_MASK, + }, + [S2MPU02_IRQ_ACOKBF] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_ACOKBF_MASK, + }, + [S2MPU02_IRQ_ACOKBR] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_ACOKBR_MASK, + }, + [S2MPU02_IRQ_PWRON1S] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_PWRON1S_MASK, + }, + [S2MPU02_IRQ_MRB] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_MRB_MASK, + }, + [S2MPU02_IRQ_RTC60S] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTC60S_MASK, + }, + [S2MPU02_IRQ_RTCA1] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTCA1_MASK, + }, + [S2MPU02_IRQ_RTCA0] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTCA0_MASK, + }, + [S2MPU02_IRQ_SMPL] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_SMPL_MASK, + }, + [S2MPU02_IRQ_RTC1S] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTC1S_MASK, + }, + [S2MPU02_IRQ_WTSR] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_WTSR_MASK, + }, + [S2MPU02_IRQ_INT120C] = { + .reg_offset = 2, + .mask = S2MPS11_IRQ_INT120C_MASK, + }, + [S2MPU02_IRQ_INT140C] = { + .reg_offset = 2, + .mask = S2MPS11_IRQ_INT140C_MASK, + }, + [S2MPU02_IRQ_TSD] = { + .reg_offset = 2, + .mask = S2MPS14_IRQ_TSD_MASK, + }, +}; + static const struct regmap_irq s5m8767_irqs[] = { [S5M8767_IRQ_PWRR] = { .reg_offset = 0, @@ -327,6 +399,16 @@ static const struct regmap_irq_chip s2mps14_irq_chip = { .ack_base = S2MPS14_REG_INT1, }; +static const struct regmap_irq_chip s2mpu02_irq_chip = { + .name = "s2mpu02", + .irqs = s2mpu02_irqs, + .num_irqs = ARRAY_SIZE(s2mpu02_irqs), + .num_regs = 3, + .status_base = S2MPU02_REG_INT1, + .mask_base = S2MPU02_REG_INT1M, + .ack_base =
[PATCHv5 1/3] mfd: sec-core: Add support for S2MPU02 device
Add support for Samsung S2MPU02 PMIC device to the MFD sec-core driver. The S2MPU02 device includes PMIC/RTC/Clock devices. Signed-off-by: Chanwoo Choi cw00.c...@samsung.com Reviewed-by: Krzysztof Kozlowski k.kozlow...@samsung.com --- drivers/mfd/sec-core.c | 19 + drivers/mfd/sec-irq.c| 88 include/linux/mfd/samsung/core.h | 1 + include/linux/mfd/samsung/irq.h | 24 +++ 4 files changed, 132 insertions(+) diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c index be06d0a..5e8784b 100644 --- a/drivers/mfd/sec-core.c +++ b/drivers/mfd/sec-core.c @@ -89,6 +89,17 @@ static const struct mfd_cell s2mpa01_devs[] = { }, }; +static const struct mfd_cell s2mpu02_devs[] = { + { + .name = s2mpu02-pmic, + }, { + .name = s2mpu02-rtc, + }, { + .name = s2mpu02-clk, + .of_compatible = samsung,s2mpu02-clk, + } +}; + #ifdef CONFIG_OF static const struct of_device_id sec_dt_match[] = { { .compatible = samsung,s5m8767-pmic, @@ -103,6 +114,9 @@ static const struct of_device_id sec_dt_match[] = { .compatible = samsung,s2mpa01-pmic, .data = (void *)S2MPA01, }, { + .compatible = samsung,s2mpu02-pmic, + .data = (void *)S2MPU02, + }, { /* Sentinel */ }, }; @@ -342,6 +356,11 @@ static int sec_pmic_probe(struct i2c_client *i2c, ret = mfd_add_devices(sec_pmic-dev, -1, s2mps14_devs, ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL); break; + case S2MPU02: + ret = mfd_add_devices(sec_pmic-dev, -1, s2mpu02_devs, + ARRAY_SIZE(s2mpu02_devs), NULL, 0, NULL); + break; + default: /* If this happens the probe function is problem */ BUG(); diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c index 654e2c1..0cabd03 100644 --- a/drivers/mfd/sec-irq.c +++ b/drivers/mfd/sec-irq.c @@ -20,6 +20,7 @@ #include linux/mfd/samsung/irq.h #include linux/mfd/samsung/s2mps11.h #include linux/mfd/samsung/s2mps14.h +#include linux/mfd/samsung/s2mpu02.h #include linux/mfd/samsung/s5m8763.h #include linux/mfd/samsung/s5m8767.h @@ -161,6 +162,77 @@ static const struct regmap_irq s2mps14_irqs[] = { }, }; +static const struct regmap_irq s2mpu02_irqs[] = { + [S2MPU02_IRQ_PWRONF] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_PWRONF_MASK, + }, + [S2MPU02_IRQ_PWRONR] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_PWRONR_MASK, + }, + [S2MPU02_IRQ_JIGONBF] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_JIGONBF_MASK, + }, + [S2MPU02_IRQ_JIGONBR] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_JIGONBR_MASK, + }, + [S2MPU02_IRQ_ACOKBF] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_ACOKBF_MASK, + }, + [S2MPU02_IRQ_ACOKBR] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_ACOKBR_MASK, + }, + [S2MPU02_IRQ_PWRON1S] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_PWRON1S_MASK, + }, + [S2MPU02_IRQ_MRB] = { + .reg_offset = 0, + .mask = S2MPS11_IRQ_MRB_MASK, + }, + [S2MPU02_IRQ_RTC60S] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTC60S_MASK, + }, + [S2MPU02_IRQ_RTCA1] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTCA1_MASK, + }, + [S2MPU02_IRQ_RTCA0] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTCA0_MASK, + }, + [S2MPU02_IRQ_SMPL] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_SMPL_MASK, + }, + [S2MPU02_IRQ_RTC1S] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_RTC1S_MASK, + }, + [S2MPU02_IRQ_WTSR] = { + .reg_offset = 1, + .mask = S2MPS11_IRQ_WTSR_MASK, + }, + [S2MPU02_IRQ_INT120C] = { + .reg_offset = 2, + .mask = S2MPS11_IRQ_INT120C_MASK, + }, + [S2MPU02_IRQ_INT140C] = { + .reg_offset = 2, + .mask = S2MPS11_IRQ_INT140C_MASK, + }, + [S2MPU02_IRQ_TSD] = { + .reg_offset = 2, + .mask = S2MPS14_IRQ_TSD_MASK, + }, +}; + static const struct regmap_irq s5m8767_irqs[] = { [S5M8767_IRQ_PWRR] = { .reg_offset = 0, @@ -327,6 +399,16 @@ static const struct regmap_irq_chip s2mps14_irq_chip = { .ack_base = S2MPS14_REG_INT1, }; +static const struct regmap_irq_chip s2mpu02_irq_chip = { + .name = s2mpu02, + .irqs =