From: Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org,
maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org,
hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
emilio-0Z03zUJReD5OxF6Tv1QG9Q@public.gmane.org,
wens-jdAy2FN1RRM@public.gmane.org,
sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Subject: Re: [PATCH v2 1/8] mfd: AXP20x: Add mfd driver for AXP20x PMIC
Date: Tue, 18 Mar 2014 15:59:19 +0000 [thread overview]
Message-ID: <20140318155919.GS25478@lee--X1> (raw)
In-Reply-To: <1394898225-28452-2-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
> This patch introduces the preliminary support for PMICs X-Powers AXP202
> and AXP209. The AXP209 and AXP202 are the PMUs (Power Management Unit)
> used by A10, A13 and A20 SoCs and developed by X-Powers, a sister company
> of Allwinner.
>
> The core enables support for two subsystems:
> - PEK (Power Enable Key)
> - Regulators
>
> Signed-off-by: Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
> ---
> drivers/mfd/Kconfig | 12 +++
> drivers/mfd/Makefile | 1 +
> drivers/mfd/axp20x.c | 247 +++++++++++++++++++++++++++++++++++++++++++++
> include/linux/mfd/axp20x.h | 179 ++++++++++++++++++++++++++++++++
> 4 files changed, 439 insertions(+)
> create mode 100644 drivers/mfd/axp20x.c
> create mode 100644 include/linux/mfd/axp20x.h
[...]
> +/*
> + * axp20x.c - mfd core driver for the X-Powers AXP202 and AXP209
MFD
[...]
> +static struct resource axp20x_pek_resources[] = {
> + {
> + .name = "PEK_DBR",
> + .start = AXP20X_IRQ_PEK_RIS_EDGE,
> + .end = AXP20X_IRQ_PEK_RIS_EDGE,
> + .flags = IORESOURCE_IRQ,
> + },
> + {
> + .name = "PEK_DBF",
> + .start = AXP20X_IRQ_PEK_FAL_EDGE,
> + .end = AXP20X_IRQ_PEK_FAL_EDGE,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
[...]
> +static struct mfd_cell axp20x_cells[] = {
> + {
> + .name = "axp20x-pek",
> + .num_resources = ARRAY_SIZE(axp20x_pek_resources),
> + .resources = axp20x_pek_resources,
> + }, {
> + .name = "axp20x-regulator",
> + },
> +};
nit: The format of these two structs are inconsistent.
[...]
> +static int axp20x_i2c_probe(struct i2c_client *i2c,
> + const struct i2c_device_id *id)
> +{
> + struct axp20x_dev *axp20x;
> + const struct of_device_id *of_id;
> + int ret;
> +
> + axp20x = devm_kzalloc(&i2c->dev, sizeof(*axp20x), GFP_KERNEL);
> + if (!axp20x)
> + return -ENOMEM;
> +
> + of_id = of_match_device(axp20x_of_match, &i2c->dev);
> + if (!of_id) {
> + dev_err(&i2c->dev, "Unable to setup AXP20X data\n");
> + return -ENODEV;
> + }
> + axp20x->variant = (int) of_id->data;
No need to cast from void *.
> + axp20x->i2c_client = i2c;
> + axp20x->dev = &i2c->dev;
> + dev_set_drvdata(axp20x->dev, axp20x);
> +
> + axp20x->regmap = devm_regmap_init_i2c(i2c, &axp20x_regmap_config);
> + if (IS_ERR(axp20x->regmap)) {
> + ret = PTR_ERR(axp20x->regmap);
> + dev_err(&i2c->dev, "regmap init failed: %d\n", ret);
> + return ret;
> + }
> +
> + axp20x->irq = i2c->irq;
Do you _really_ need this if you have 'axp20x->i2c_client->irq'?
> + ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq,
> + IRQF_ONESHOT | IRQF_SHARED, -1,
> + &axp20x_regmap_irq_chip,
> + &axp20x->regmap_irqc);
> + if (ret) {
> + dev_err(&i2c->dev, "failed to add irq chip: %d\n", ret);
> + return ret;
> + }
> +
> + ret = mfd_add_devices(axp20x->dev, -1, axp20x_cells,
> + ARRAY_SIZE(axp20x_cells), NULL, 0, NULL);
> +
> + if (ret) {
> + dev_err(&i2c->dev, "failed to add MFD devices: %d\n", ret);
> + goto mfd_err;
> + }
> +
> + if (!pm_power_off) {
> + axp20x_pm_power_off = axp20x;
> + pm_power_off = axp20x_power_off;
> + }
> +
> + dev_info(&i2c->dev, "AXP20X driver loaded\n");
> +
> + return 0;
> +
> +mfd_err:
> + regmap_del_irq_chip(axp20x->irq, axp20x->regmap_irqc);
> +
> + return ret;
I'd say the goto is pointless if you're only using it once.
Instead move regmap_del_irq_chip() into mfd_add_devices()'s error
handler and return straight from there.
[...]
> +static const struct i2c_device_id axp20x_i2c_id[] = {
> + { "axp202", AXP202_ID },
> + { "axp209", AXP209_ID },
> + { }
> +};
> +MODULE_DEVICE_TABLE(i2c, axp20x_i2c_id);
Isn't this redundant now that you're using of_id?
[...]
> +#ifndef __LINUX_MFD_AXP20X_H
> +#define __LINUX_MFD_AXP20X_H
> +
> +#define AXP202_ID 0
> +#define AXP209_ID 1
enum?
[...]
> +struct axp20x_dev {
> + struct device *dev;
> + struct i2c_client *i2c_client;
> + struct regmap *regmap;
> + struct regmap_irq_chip_data *regmap_irqc;
> + int variant;
> + int irq;
i2c_client->irq?
> +};
> +
> +#endif /* __LINUX_MFD_AXP20X_H */
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit https://groups.google.com/d/optout.
WARNING: multiple messages have this Message-ID (diff)
From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/8] mfd: AXP20x: Add mfd driver for AXP20x PMIC
Date: Tue, 18 Mar 2014 15:59:19 +0000 [thread overview]
Message-ID: <20140318155919.GS25478@lee--X1> (raw)
In-Reply-To: <1394898225-28452-2-git-send-email-carlo@caione.org>
> This patch introduces the preliminary support for PMICs X-Powers AXP202
> and AXP209. The AXP209 and AXP202 are the PMUs (Power Management Unit)
> used by A10, A13 and A20 SoCs and developed by X-Powers, a sister company
> of Allwinner.
>
> The core enables support for two subsystems:
> - PEK (Power Enable Key)
> - Regulators
>
> Signed-off-by: Carlo Caione <carlo@caione.org>
> ---
> drivers/mfd/Kconfig | 12 +++
> drivers/mfd/Makefile | 1 +
> drivers/mfd/axp20x.c | 247 +++++++++++++++++++++++++++++++++++++++++++++
> include/linux/mfd/axp20x.h | 179 ++++++++++++++++++++++++++++++++
> 4 files changed, 439 insertions(+)
> create mode 100644 drivers/mfd/axp20x.c
> create mode 100644 include/linux/mfd/axp20x.h
[...]
> +/*
> + * axp20x.c - mfd core driver for the X-Powers AXP202 and AXP209
MFD
[...]
> +static struct resource axp20x_pek_resources[] = {
> + {
> + .name = "PEK_DBR",
> + .start = AXP20X_IRQ_PEK_RIS_EDGE,
> + .end = AXP20X_IRQ_PEK_RIS_EDGE,
> + .flags = IORESOURCE_IRQ,
> + },
> + {
> + .name = "PEK_DBF",
> + .start = AXP20X_IRQ_PEK_FAL_EDGE,
> + .end = AXP20X_IRQ_PEK_FAL_EDGE,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
[...]
> +static struct mfd_cell axp20x_cells[] = {
> + {
> + .name = "axp20x-pek",
> + .num_resources = ARRAY_SIZE(axp20x_pek_resources),
> + .resources = axp20x_pek_resources,
> + }, {
> + .name = "axp20x-regulator",
> + },
> +};
nit: The format of these two structs are inconsistent.
[...]
> +static int axp20x_i2c_probe(struct i2c_client *i2c,
> + const struct i2c_device_id *id)
> +{
> + struct axp20x_dev *axp20x;
> + const struct of_device_id *of_id;
> + int ret;
> +
> + axp20x = devm_kzalloc(&i2c->dev, sizeof(*axp20x), GFP_KERNEL);
> + if (!axp20x)
> + return -ENOMEM;
> +
> + of_id = of_match_device(axp20x_of_match, &i2c->dev);
> + if (!of_id) {
> + dev_err(&i2c->dev, "Unable to setup AXP20X data\n");
> + return -ENODEV;
> + }
> + axp20x->variant = (int) of_id->data;
No need to cast from void *.
> + axp20x->i2c_client = i2c;
> + axp20x->dev = &i2c->dev;
> + dev_set_drvdata(axp20x->dev, axp20x);
> +
> + axp20x->regmap = devm_regmap_init_i2c(i2c, &axp20x_regmap_config);
> + if (IS_ERR(axp20x->regmap)) {
> + ret = PTR_ERR(axp20x->regmap);
> + dev_err(&i2c->dev, "regmap init failed: %d\n", ret);
> + return ret;
> + }
> +
> + axp20x->irq = i2c->irq;
Do you _really_ need this if you have 'axp20x->i2c_client->irq'?
> + ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq,
> + IRQF_ONESHOT | IRQF_SHARED, -1,
> + &axp20x_regmap_irq_chip,
> + &axp20x->regmap_irqc);
> + if (ret) {
> + dev_err(&i2c->dev, "failed to add irq chip: %d\n", ret);
> + return ret;
> + }
> +
> + ret = mfd_add_devices(axp20x->dev, -1, axp20x_cells,
> + ARRAY_SIZE(axp20x_cells), NULL, 0, NULL);
> +
> + if (ret) {
> + dev_err(&i2c->dev, "failed to add MFD devices: %d\n", ret);
> + goto mfd_err;
> + }
> +
> + if (!pm_power_off) {
> + axp20x_pm_power_off = axp20x;
> + pm_power_off = axp20x_power_off;
> + }
> +
> + dev_info(&i2c->dev, "AXP20X driver loaded\n");
> +
> + return 0;
> +
> +mfd_err:
> + regmap_del_irq_chip(axp20x->irq, axp20x->regmap_irqc);
> +
> + return ret;
I'd say the goto is pointless if you're only using it once.
Instead move regmap_del_irq_chip() into mfd_add_devices()'s error
handler and return straight from there.
[...]
> +static const struct i2c_device_id axp20x_i2c_id[] = {
> + { "axp202", AXP202_ID },
> + { "axp209", AXP209_ID },
> + { }
> +};
> +MODULE_DEVICE_TABLE(i2c, axp20x_i2c_id);
Isn't this redundant now that you're using of_id?
[...]
> +#ifndef __LINUX_MFD_AXP20X_H
> +#define __LINUX_MFD_AXP20X_H
> +
> +#define AXP202_ID 0
> +#define AXP209_ID 1
enum?
[...]
> +struct axp20x_dev {
> + struct device *dev;
> + struct i2c_client *i2c_client;
> + struct regmap *regmap;
> + struct regmap_irq_chip_data *regmap_irqc;
> + int variant;
> + int irq;
i2c_client->irq?
> +};
> +
> +#endif /* __LINUX_MFD_AXP20X_H */
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
next prev parent reply other threads:[~2014-03-18 15:59 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-15 15:43 [PATCH v2 0/8] mfd: AXP20x: Add support for AXP202 and AXP209 Carlo Caione
2014-03-15 15:43 ` Carlo Caione
[not found] ` <1394898225-28452-1-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-15 15:43 ` [PATCH v2 1/8] mfd: AXP20x: Add mfd driver for AXP20x PMIC Carlo Caione
2014-03-15 15:43 ` Carlo Caione
[not found] ` <1394898225-28452-2-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-18 15:59 ` Lee Jones [this message]
2014-03-18 15:59 ` Lee Jones
2014-03-22 16:51 ` Carlo Caione
2014-03-22 16:51 ` [linux-sunxi] " Carlo Caione
[not found] ` <20140322165132.GC20668-bi+AKbBUZKZeIdyRz4JgOMwOAu8XWILU@public.gmane.org>
2014-03-22 17:33 ` Mark Brown
2014-03-22 17:33 ` [linux-sunxi] " Mark Brown
[not found] ` <20140322173313.GU552-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-03-22 18:05 ` Carlo Caione
2014-03-22 18:05 ` [linux-sunxi] " Carlo Caione
2014-03-22 18:13 ` Carlo Caione
2014-03-22 18:13 ` Carlo Caione
[not found] ` <CAOQ7t2Yg5pp_rXYfsdnHpy-zGFGimzT3EW15P_0ugYMtgPtOrw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-22 18:42 ` Dmitry Torokhov
2014-03-22 18:42 ` [linux-sunxi] " Dmitry Torokhov
[not found] ` <20140322184201.GA27611-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2014-03-22 19:08 ` Carlo Caione
2014-03-22 19:08 ` [linux-sunxi] " Carlo Caione
[not found] ` <20140322190803.GA20987-bi+AKbBUZKZeIdyRz4JgOMwOAu8XWILU@public.gmane.org>
2014-03-22 19:29 ` Mark Brown
2014-03-22 19:29 ` [linux-sunxi] " Mark Brown
2014-03-24 8:34 ` Lee Jones
2014-03-24 8:34 ` [linux-sunxi] " Lee Jones
2014-03-15 15:43 ` [PATCH v2 2/8] mfd: AXP20x: Add bindings documentation Carlo Caione
2014-03-15 15:43 ` Carlo Caione
[not found] ` <1394898225-28452-3-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-18 8:45 ` Maxime Ripard
2014-03-18 8:45 ` Maxime Ripard
2014-03-22 14:11 ` Carlo Caione
2014-03-22 14:11 ` [linux-sunxi] " Carlo Caione
[not found] ` <20140322141157.GA20668-bi+AKbBUZKZeIdyRz4JgOMwOAu8XWILU@public.gmane.org>
2014-03-25 10:11 ` Maxime Ripard
2014-03-25 10:11 ` [linux-sunxi] " Maxime Ripard
2014-03-15 15:43 ` [PATCH v2 3/8] input: misc: Add driver for AXP20x Power Enable Key Carlo Caione
2014-03-15 15:43 ` Carlo Caione
[not found] ` <1394898225-28452-4-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-18 9:00 ` Maxime Ripard
2014-03-18 9:00 ` Maxime Ripard
2014-03-18 9:50 ` Lee Jones
2014-03-18 9:50 ` Lee Jones
2014-03-18 10:15 ` Maxime Ripard
2014-03-18 10:15 ` Maxime Ripard
2014-03-18 10:58 ` Lee Jones
2014-03-18 10:58 ` Lee Jones
2014-03-18 14:03 ` Maxime Ripard
2014-03-18 14:03 ` Maxime Ripard
2014-03-15 15:43 ` [PATCH v2 4/8] input: misc: Add ABI docs for AXP20x PEK Carlo Caione
2014-03-15 15:43 ` Carlo Caione
2014-03-15 15:43 ` [PATCH v2 5/8] regulator: AXP20x: Add support for regulators subsystem Carlo Caione
2014-03-15 15:43 ` Carlo Caione
2014-03-17 8:19 ` Krzysztof Kozlowski
2014-03-17 8:19 ` Krzysztof Kozlowski
[not found] ` <1394898225-28452-6-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-17 17:33 ` Mark Brown
2014-03-17 17:33 ` Mark Brown
2014-03-15 15:43 ` [PATCH v2 6/8] ARM: sunxi: dt: Add x-powers-axp209.dtsi file Carlo Caione
2014-03-15 15:43 ` Carlo Caione
[not found] ` <1394898225-28452-7-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-18 9:04 ` Maxime Ripard
2014-03-18 9:04 ` Maxime Ripard
2014-03-22 14:31 ` Carlo Caione
2014-03-22 14:31 ` [linux-sunxi] " Carlo Caione
[not found] ` <20140322143157.GB20668-bi+AKbBUZKZeIdyRz4JgOMwOAu8XWILU@public.gmane.org>
2014-03-25 10:11 ` Maxime Ripard
2014-03-25 10:11 ` [linux-sunxi] " Maxime Ripard
2014-03-15 15:43 ` [PATCH v2 7/8] ARM: sun7i: dt: Add AXP209 support to various boards Carlo Caione
2014-03-15 15:43 ` Carlo Caione
[not found] ` <1394898225-28452-8-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-15 15:45 ` Hans de Goede
2014-03-15 15:45 ` Hans de Goede
[not found] ` <53247584.8060701-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-03-15 15:48 ` Carlo Caione
2014-03-15 15:48 ` Carlo Caione
2014-03-15 15:43 ` [PATCH v2 8/8] ARM: sunxi: Add AXP20x support in defconfig Carlo Caione
2014-03-15 15:43 ` Carlo Caione
[not found] ` <1394898225-28452-9-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-03-18 9:05 ` Maxime Ripard
2014-03-18 9:05 ` Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140318155919.GS25478@lee--X1 \
--to=lee.jones-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
--cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=emilio-0Z03zUJReD5OxF6Tv1QG9Q@public.gmane.org \
--cc=hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
--cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
--cc=sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=wens-jdAy2FN1RRM@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.