[PATCH v1 2/2] iio: adc: modify NPCM reset support
Tomer Maimon
tmaimon77 at gmail.com
Thu Jan 30 19:20:30 AEDT 2020
Hi Jonathan,
The patch replace reset ADC method from direct register access to using
reset driver (will applied next Linux version).
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next-history.git/commit/?h=next-20200130&id=9c81b2ccf82da6e995b63e945afa882cfaa03ca9
The ADC dt-binding modified as well to use the new reset method (approved
by Rob Herring)
https://www.spinics.net/lists/devicetree/msg331327.html
Indeed the this modification require DT modification as it described in the
ADC dt-binding commit, is it an issue? Do you thnk I should describe it in
the commit?
Thanks,
Tomer
On Wed, 29 Jan 2020 at 22:01, Jonathan Cameron <jic23 at kernel.org> wrote:
> On Sun, 19 Jan 2020 13:00:32 +0200
> Tomer Maimon <tmaimon77 at gmail.com> wrote:
>
> > Modify NPCM ADC reset support from
> > direct register access to reset controller support.
> >
> > Signed-off-by: Tomer Maimon <tmaimon77 at gmail.com>
>
> Hmm. This presumably breaks all old DT.
>
> If that's not a problem please say why.
>
> Jonathan
>
> > ---
> > drivers/iio/adc/npcm_adc.c | 30 +++++++++---------------------
> > 1 file changed, 9 insertions(+), 21 deletions(-)
> >
> > diff --git a/drivers/iio/adc/npcm_adc.c b/drivers/iio/adc/npcm_adc.c
> > index a6170a37ebe8..83bad2d5575d 100644
> > --- a/drivers/iio/adc/npcm_adc.c
> > +++ b/drivers/iio/adc/npcm_adc.c
> > @@ -14,6 +14,7 @@
> > #include <linux/regulator/consumer.h>
> > #include <linux/spinlock.h>
> > #include <linux/uaccess.h>
> > +#include <linux/reset.h>
> >
> > struct npcm_adc {
> > bool int_status;
> > @@ -23,13 +24,9 @@ struct npcm_adc {
> > struct clk *adc_clk;
> > wait_queue_head_t wq;
> > struct regulator *vref;
> > - struct regmap *rst_regmap;
> > + struct reset_control *reset;
> > };
> >
> > -/* NPCM7xx reset module */
> > -#define NPCM7XX_IPSRST1_OFFSET 0x020
> > -#define NPCM7XX_IPSRST1_ADC_RST BIT(27)
> > -
> > /* ADC registers */
> > #define NPCM_ADCCON 0x00
> > #define NPCM_ADCDATA 0x04
> > @@ -106,13 +103,11 @@ static int npcm_adc_read(struct npcm_adc *info,
> int *val, u8 channel)
> > msecs_to_jiffies(10));
> > if (ret == 0) {
> > regtemp = ioread32(info->regs + NPCM_ADCCON);
> > - if ((regtemp & NPCM_ADCCON_ADC_CONV) && info->rst_regmap) {
> > + if (regtemp & NPCM_ADCCON_ADC_CONV) {
> > /* if conversion failed - reset ADC module */
> > - regmap_write(info->rst_regmap,
> NPCM7XX_IPSRST1_OFFSET,
> > - NPCM7XX_IPSRST1_ADC_RST);
> > + reset_control_assert(info->reset);
> > msleep(100);
> > - regmap_write(info->rst_regmap,
> NPCM7XX_IPSRST1_OFFSET,
> > - 0x0);
> > + reset_control_deassert(info->reset);
> > msleep(100);
> >
> > /* Enable ADC and start conversion module */
> > @@ -186,7 +181,6 @@ static int npcm_adc_probe(struct platform_device
> *pdev)
> > struct npcm_adc *info;
> > struct iio_dev *indio_dev;
> > struct device *dev = &pdev->dev;
> > - struct device_node *np = pdev->dev.of_node;
> >
> > indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info));
> > if (!indio_dev)
> > @@ -199,6 +193,10 @@ static int npcm_adc_probe(struct platform_device
> *pdev)
> > if (IS_ERR(info->regs))
> > return PTR_ERR(info->regs);
> >
> > + info->reset = devm_reset_control_get(&pdev->dev, NULL);
> > + if (IS_ERR(info->reset))
> > + return PTR_ERR(info->reset);
> > +
> > info->adc_clk = devm_clk_get(&pdev->dev, NULL);
> > if (IS_ERR(info->adc_clk)) {
> > dev_warn(&pdev->dev, "ADC clock failed: can't read clk\n");
> > @@ -211,16 +209,6 @@ static int npcm_adc_probe(struct platform_device
> *pdev)
> > div = div >> NPCM_ADCCON_DIV_SHIFT;
> > info->adc_sample_hz = clk_get_rate(info->adc_clk) / ((div + 1) *
> 2);
> >
> > - if (of_device_is_compatible(np, "nuvoton,npcm750-adc")) {
> > - info->rst_regmap = syscon_regmap_lookup_by_compatible
> > - ("nuvoton,npcm750-rst");
> > - if (IS_ERR(info->rst_regmap)) {
> > - dev_err(&pdev->dev, "Failed to find
> nuvoton,npcm750-rst\n");
> > - ret = PTR_ERR(info->rst_regmap);
> > - goto err_disable_clk;
> > - }
> > - }
> > -
> > irq = platform_get_irq(pdev, 0);
> > if (irq <= 0) {
> > ret = -EINVAL;
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/openbmc/attachments/20200130/b0a7786d/attachment.htm>
More information about the openbmc
mailing list