Message ID | 1435137673-1629-2-git-send-email-vaibhav.hiremath@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
2015-06-24 18:21 GMT+09:00 Vaibhav Hiremath <vaibhav.hiremath@linaro.org>: > Add DT support to the 88pm800 driver, along with compatible > field for it's sub-devices (rtc, onkey and regulator) > > Signed-off-by: Chao Xie <chao.xie@marvell.com> > Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> > --- > drivers/mfd/88pm800.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c > index 841717a..059f01a 100644 > --- a/drivers/mfd/88pm800.c > +++ b/drivers/mfd/88pm800.c > @@ -27,6 +27,7 @@ > #include <linux/mfd/core.h> > #include <linux/mfd/88pm80x.h> > #include <linux/slab.h> > +#include <linux/of_device.h> > > /* Interrupt Registers */ > #define PM800_INT_STATUS1 (0x05) > @@ -121,6 +122,11 @@ static const struct i2c_device_id pm80x_id_table[] = { > }; > MODULE_DEVICE_TABLE(i2c, pm80x_id_table); > > +static const struct of_device_id pm80x_of_match_table[] = { > + { .compatible = "marvell,88pm800", }, > + {}, > +}; > + > static struct resource rtc_resources[] = { > { > .name = "88pm80x-rtc", > @@ -133,6 +139,7 @@ static struct resource rtc_resources[] = { > static struct mfd_cell rtc_devs[] = { > { > .name = "88pm80x-rtc", > + .of_compatible = "marvell,88pm80x-rtc", > .num_resources = ARRAY_SIZE(rtc_resources), > .resources = &rtc_resources[0], > .id = -1, > @@ -151,6 +158,7 @@ static struct resource onkey_resources[] = { > static const struct mfd_cell onkey_devs[] = { > { > .name = "88pm80x-onkey", > + .of_compatible = "marvell,88pm80x-onkey", > .num_resources = 1, > .resources = &onkey_resources[0], > .id = -1, > @@ -160,6 +168,7 @@ static const struct mfd_cell onkey_devs[] = { > static const struct mfd_cell regulator_devs[] = { > { > .name = "88pm80x-regulator", > + .of_compatible = "marvell,88pm80x-regulator", > .id = -1, > }, > }; > @@ -544,8 +553,23 @@ static int pm800_probe(struct i2c_client *client, > int ret = 0; > struct pm80x_chip *chip; > struct pm80x_platform_data *pdata = dev_get_platdata(&client->dev); > + struct device_node *np = client->dev.of_node; > struct pm80x_subchip *subchip; > > + if (!pdata && !np) { > + dev_err(&client->dev, > + "pm80x requires platform data or of_node\n"); > + return -EINVAL; > + } > + > + if (!pdata) { > + pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL); > + if (!pdata) { > + dev_err(&client->dev, "failed to allocaate memory\n"); Generic error message for ENOMEM is not needed. Just return ENOMEM and the core code will print the error. Rest looks fine, Best regards, Krzysztof
On Thursday 25 June 2015 05:27 AM, Krzysztof Kozlowski wrote: > 2015-06-24 18:21 GMT+09:00 Vaibhav Hiremath <vaibhav.hiremath@linaro.org>: >> Add DT support to the 88pm800 driver, along with compatible >> field for it's sub-devices (rtc, onkey and regulator) >> >> Signed-off-by: Chao Xie <chao.xie@marvell.com> >> Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> >> --- >> drivers/mfd/88pm800.c | 25 +++++++++++++++++++++++++ >> 1 file changed, 25 insertions(+) >> >> diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c >> index 841717a..059f01a 100644 >> --- a/drivers/mfd/88pm800.c >> +++ b/drivers/mfd/88pm800.c >> @@ -27,6 +27,7 @@ >> #include <linux/mfd/core.h> >> #include <linux/mfd/88pm80x.h> >> #include <linux/slab.h> >> +#include <linux/of_device.h> >> >> /* Interrupt Registers */ >> #define PM800_INT_STATUS1 (0x05) >> @@ -121,6 +122,11 @@ static const struct i2c_device_id pm80x_id_table[] = { >> }; >> MODULE_DEVICE_TABLE(i2c, pm80x_id_table); >> >> +static const struct of_device_id pm80x_of_match_table[] = { >> + { .compatible = "marvell,88pm800", }, >> + {}, >> +}; >> + >> static struct resource rtc_resources[] = { >> { >> .name = "88pm80x-rtc", >> @@ -133,6 +139,7 @@ static struct resource rtc_resources[] = { >> static struct mfd_cell rtc_devs[] = { >> { >> .name = "88pm80x-rtc", >> + .of_compatible = "marvell,88pm80x-rtc", >> .num_resources = ARRAY_SIZE(rtc_resources), >> .resources = &rtc_resources[0], >> .id = -1, >> @@ -151,6 +158,7 @@ static struct resource onkey_resources[] = { >> static const struct mfd_cell onkey_devs[] = { >> { >> .name = "88pm80x-onkey", >> + .of_compatible = "marvell,88pm80x-onkey", >> .num_resources = 1, >> .resources = &onkey_resources[0], >> .id = -1, >> @@ -160,6 +168,7 @@ static const struct mfd_cell onkey_devs[] = { >> static const struct mfd_cell regulator_devs[] = { >> { >> .name = "88pm80x-regulator", >> + .of_compatible = "marvell,88pm80x-regulator", >> .id = -1, >> }, >> }; >> @@ -544,8 +553,23 @@ static int pm800_probe(struct i2c_client *client, >> int ret = 0; >> struct pm80x_chip *chip; >> struct pm80x_platform_data *pdata = dev_get_platdata(&client->dev); >> + struct device_node *np = client->dev.of_node; >> struct pm80x_subchip *subchip; >> >> + if (!pdata && !np) { >> + dev_err(&client->dev, >> + "pm80x requires platform data or of_node\n"); >> + return -EINVAL; >> + } >> + >> + if (!pdata) { >> + pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL); >> + if (!pdata) { >> + dev_err(&client->dev, "failed to allocaate memory\n"); > > Generic error message for ENOMEM is not needed. Just return ENOMEM and > the core code will print the error. > > Rest looks fine, Ok, will remove it. Should I add your reviewed-by in V4 for this patch? Thanks, Vaibhav
On 25.06.2015 14:27, Vaibhav Hiremath wrote: > > > On Thursday 25 June 2015 05:27 AM, Krzysztof Kozlowski wrote: >> 2015-06-24 18:21 GMT+09:00 Vaibhav Hiremath >> <vaibhav.hiremath@linaro.org>: >>> Add DT support to the 88pm800 driver, along with compatible >>> field for it's sub-devices (rtc, onkey and regulator) >>> >>> Signed-off-by: Chao Xie <chao.xie@marvell.com> >>> Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> >>> --- >>> drivers/mfd/88pm800.c | 25 +++++++++++++++++++++++++ >>> 1 file changed, 25 insertions(+) >>> >>> diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c >>> index 841717a..059f01a 100644 >>> --- a/drivers/mfd/88pm800.c >>> +++ b/drivers/mfd/88pm800.c >>> @@ -27,6 +27,7 @@ >>> #include <linux/mfd/core.h> >>> #include <linux/mfd/88pm80x.h> >>> #include <linux/slab.h> >>> +#include <linux/of_device.h> >>> >>> /* Interrupt Registers */ >>> #define PM800_INT_STATUS1 (0x05) >>> @@ -121,6 +122,11 @@ static const struct i2c_device_id >>> pm80x_id_table[] = { >>> }; >>> MODULE_DEVICE_TABLE(i2c, pm80x_id_table); >>> >>> +static const struct of_device_id pm80x_of_match_table[] = { >>> + { .compatible = "marvell,88pm800", }, >>> + {}, >>> +}; >>> + >>> static struct resource rtc_resources[] = { >>> { >>> .name = "88pm80x-rtc", >>> @@ -133,6 +139,7 @@ static struct resource rtc_resources[] = { >>> static struct mfd_cell rtc_devs[] = { >>> { >>> .name = "88pm80x-rtc", >>> + .of_compatible = "marvell,88pm80x-rtc", >>> .num_resources = ARRAY_SIZE(rtc_resources), >>> .resources = &rtc_resources[0], >>> .id = -1, >>> @@ -151,6 +158,7 @@ static struct resource onkey_resources[] = { >>> static const struct mfd_cell onkey_devs[] = { >>> { >>> .name = "88pm80x-onkey", >>> + .of_compatible = "marvell,88pm80x-onkey", >>> .num_resources = 1, >>> .resources = &onkey_resources[0], >>> .id = -1, >>> @@ -160,6 +168,7 @@ static const struct mfd_cell onkey_devs[] = { >>> static const struct mfd_cell regulator_devs[] = { >>> { >>> .name = "88pm80x-regulator", >>> + .of_compatible = "marvell,88pm80x-regulator", >>> .id = -1, >>> }, >>> }; >>> @@ -544,8 +553,23 @@ static int pm800_probe(struct i2c_client *client, >>> int ret = 0; >>> struct pm80x_chip *chip; >>> struct pm80x_platform_data *pdata = >>> dev_get_platdata(&client->dev); >>> + struct device_node *np = client->dev.of_node; >>> struct pm80x_subchip *subchip; >>> >>> + if (!pdata && !np) { >>> + dev_err(&client->dev, >>> + "pm80x requires platform data or of_node\n"); >>> + return -EINVAL; >>> + } >>> + >>> + if (!pdata) { >>> + pdata = devm_kzalloc(&client->dev, sizeof(*pdata), >>> GFP_KERNEL); >>> + if (!pdata) { >>> + dev_err(&client->dev, "failed to allocaate >>> memory\n"); >> >> Generic error message for ENOMEM is not needed. Just return ENOMEM and >> the core code will print the error. >> >> Rest looks fine, > > > Ok, will remove it. > > Should I add your reviewed-by in V4 for this patch? No, not yet. :) I would put such tag in my reply if I had that intention. Best regards, Krzysztof
diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c index 841717a..059f01a 100644 --- a/drivers/mfd/88pm800.c +++ b/drivers/mfd/88pm800.c @@ -27,6 +27,7 @@ #include <linux/mfd/core.h> #include <linux/mfd/88pm80x.h> #include <linux/slab.h> +#include <linux/of_device.h> /* Interrupt Registers */ #define PM800_INT_STATUS1 (0x05) @@ -121,6 +122,11 @@ static const struct i2c_device_id pm80x_id_table[] = { }; MODULE_DEVICE_TABLE(i2c, pm80x_id_table); +static const struct of_device_id pm80x_of_match_table[] = { + { .compatible = "marvell,88pm800", }, + {}, +}; + static struct resource rtc_resources[] = { { .name = "88pm80x-rtc", @@ -133,6 +139,7 @@ static struct resource rtc_resources[] = { static struct mfd_cell rtc_devs[] = { { .name = "88pm80x-rtc", + .of_compatible = "marvell,88pm80x-rtc", .num_resources = ARRAY_SIZE(rtc_resources), .resources = &rtc_resources[0], .id = -1, @@ -151,6 +158,7 @@ static struct resource onkey_resources[] = { static const struct mfd_cell onkey_devs[] = { { .name = "88pm80x-onkey", + .of_compatible = "marvell,88pm80x-onkey", .num_resources = 1, .resources = &onkey_resources[0], .id = -1, @@ -160,6 +168,7 @@ static const struct mfd_cell onkey_devs[] = { static const struct mfd_cell regulator_devs[] = { { .name = "88pm80x-regulator", + .of_compatible = "marvell,88pm80x-regulator", .id = -1, }, }; @@ -544,8 +553,23 @@ static int pm800_probe(struct i2c_client *client, int ret = 0; struct pm80x_chip *chip; struct pm80x_platform_data *pdata = dev_get_platdata(&client->dev); + struct device_node *np = client->dev.of_node; struct pm80x_subchip *subchip; + if (!pdata && !np) { + dev_err(&client->dev, + "pm80x requires platform data or of_node\n"); + return -EINVAL; + } + + if (!pdata) { + pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) { + dev_err(&client->dev, "failed to allocaate memory\n"); + return -ENOMEM; + } + } + ret = pm80x_init(client); if (ret) { dev_err(&client->dev, "pm800_init fail\n"); @@ -611,6 +635,7 @@ static struct i2c_driver pm800_driver = { .name = "88PM800", .owner = THIS_MODULE, .pm = &pm80x_pm_ops, + .of_match_table = pm80x_of_match_table, }, .probe = pm800_probe, .remove = pm800_remove,