Re: [PATCH v2 8/9] atmel_flexcom: Support backup mode
On 20/09/2017 at 10:30:31 +0200, Romain Izard wrote: > 2017-09-19 17:25 GMT+02:00 Lee Jones : > > On Tue, 19 Sep 2017, Nicolas Ferre wrote: > > > >> On 15/09/2017 at 16:04, Romain Izard wrote: > >> > The controller used by a flexcom module is configured at boot, and left > >> > alone after this. As the configuration will be lost after backup mode, > >> > restore the state of the flexcom driver on resume. > >> > > >> > Signed-off-by: Romain Izard > >> > >> Tested-by: Nicolas Ferre > >> On sama5d2 Xplained board (i2c0 from flexcom 4). > >> and obviously: > >> Acked-by: Nicolas Ferre > >> > >> Thanks Romain! > >> > >> Regards, > >> > >> > --- > >> > drivers/mfd/atmel-flexcom.c | 65 > >> > ++--- > >> > 1 file changed, 50 insertions(+), 15 deletions(-) > > > > This is the first time I've seen this patch. Why's that? > > > > As the patchset covers many subsystems, get_maintainers.pl provided a > very long list of both developpers and mailing lists (28). I thought it > was a good idea to shorten it a little. Bad idea. Sorry. > I think the correct way of handling that would have been to send each patch to the proper subsystem as there are no dependency here. -- Alexandre Belloni, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 8/9] atmel_flexcom: Support backup mode
2017-09-19 17:25 GMT+02:00 Lee Jones : > On Tue, 19 Sep 2017, Nicolas Ferre wrote: > >> On 15/09/2017 at 16:04, Romain Izard wrote: >> > The controller used by a flexcom module is configured at boot, and left >> > alone after this. As the configuration will be lost after backup mode, >> > restore the state of the flexcom driver on resume. >> > >> > Signed-off-by: Romain Izard >> >> Tested-by: Nicolas Ferre >> On sama5d2 Xplained board (i2c0 from flexcom 4). >> and obviously: >> Acked-by: Nicolas Ferre >> >> Thanks Romain! >> >> Regards, >> >> > --- >> > drivers/mfd/atmel-flexcom.c | 65 >> > ++--- >> > 1 file changed, 50 insertions(+), 15 deletions(-) > > This is the first time I've seen this patch. Why's that? > As the patchset covers many subsystems, get_maintainers.pl provided a very long list of both developpers and mailing lists (28). I thought it was a good idea to shorten it a little. Bad idea. Sorry. Best regards, -- Romain Izard -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 8/9] atmel_flexcom: Support backup mode
On Tue, 19 Sep 2017, Nicolas Ferre wrote: > On 15/09/2017 at 16:04, Romain Izard wrote: > > The controller used by a flexcom module is configured at boot, and left > > alone after this. As the configuration will be lost after backup mode, > > restore the state of the flexcom driver on resume. > > > > Signed-off-by: Romain Izard > > Tested-by: Nicolas Ferre > On sama5d2 Xplained board (i2c0 from flexcom 4). > and obviously: > Acked-by: Nicolas Ferre > > Thanks Romain! > > Regards, > > > --- > > drivers/mfd/atmel-flexcom.c | 65 > > ++--- > > 1 file changed, 50 insertions(+), 15 deletions(-) This is the first time I've seen this patch. Why's that? -- 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-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 8/9] atmel_flexcom: Support backup mode
On 15/09/2017 at 16:04, Romain Izard wrote: > The controller used by a flexcom module is configured at boot, and left > alone after this. As the configuration will be lost after backup mode, > restore the state of the flexcom driver on resume. > > Signed-off-by: Romain Izard Tested-by: Nicolas Ferre On sama5d2 Xplained board (i2c0 from flexcom 4). and obviously: Acked-by: Nicolas Ferre Thanks Romain! Regards, > --- > drivers/mfd/atmel-flexcom.c | 65 > ++--- > 1 file changed, 50 insertions(+), 15 deletions(-) > > diff --git a/drivers/mfd/atmel-flexcom.c b/drivers/mfd/atmel-flexcom.c > index 064bde9cff5a..ef1235c4a179 100644 > --- a/drivers/mfd/atmel-flexcom.c > +++ b/drivers/mfd/atmel-flexcom.c > @@ -39,34 +39,44 @@ > #define FLEX_MR_OPMODE(opmode) (((opmode) << FLEX_MR_OPMODE_OFFSET) & > \ >FLEX_MR_OPMODE_MASK) > > +struct atmel_flexcom { > + void __iomem *base; > + u32 opmode; > + struct clk *clk; > +}; > > static int atmel_flexcom_probe(struct platform_device *pdev) > { > struct device_node *np = pdev->dev.of_node; > - struct clk *clk; > struct resource *res; > - void __iomem *base; > - u32 opmode; > + struct atmel_flexcom *afc; > int err; > + u32 val; > + > + afc = devm_kzalloc(&pdev->dev, sizeof(*afc), GFP_KERNEL); > + if (!afc) > + return -ENOMEM; > > - err = of_property_read_u32(np, "atmel,flexcom-mode", &opmode); > + platform_set_drvdata(pdev, afc); > + > + err = of_property_read_u32(np, "atmel,flexcom-mode", &afc->opmode); > if (err) > return err; > > - if (opmode < ATMEL_FLEXCOM_MODE_USART || > - opmode > ATMEL_FLEXCOM_MODE_TWI) > + if (afc->opmode < ATMEL_FLEXCOM_MODE_USART || > + afc->opmode > ATMEL_FLEXCOM_MODE_TWI) > return -EINVAL; > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - base = devm_ioremap_resource(&pdev->dev, res); > - if (IS_ERR(base)) > - return PTR_ERR(base); > + afc->base = devm_ioremap_resource(&pdev->dev, res); > + if (IS_ERR(afc->base)) > + return PTR_ERR(afc->base); > > - clk = devm_clk_get(&pdev->dev, NULL); > - if (IS_ERR(clk)) > - return PTR_ERR(clk); > + afc->clk = devm_clk_get(&pdev->dev, NULL); > + if (IS_ERR(afc->clk)) > + return PTR_ERR(afc->clk); > > - err = clk_prepare_enable(clk); > + err = clk_prepare_enable(afc->clk); > if (err) > return err; > > @@ -76,9 +86,10 @@ static int atmel_flexcom_probe(struct platform_device > *pdev) >* inaccessible and are read as zero. Also the external I/O lines of the >* Flexcom are muxed to reach the selected device. >*/ > - writel(FLEX_MR_OPMODE(opmode), base + FLEX_MR); > + val = FLEX_MR_OPMODE(afc->opmode); > + writel(val, afc->base + FLEX_MR); > > - clk_disable_unprepare(clk); > + clk_disable_unprepare(afc->clk); > > return devm_of_platform_populate(&pdev->dev); > } > @@ -89,10 +100,34 @@ static const struct of_device_id > atmel_flexcom_of_match[] = { > }; > MODULE_DEVICE_TABLE(of, atmel_flexcom_of_match); > > +#ifdef CONFIG_PM_SLEEP > +static int atmel_flexcom_resume(struct device *dev) > +{ > + struct atmel_flexcom *afc = dev_get_drvdata(dev); > + int err; > + u32 val; > + > + err = clk_prepare_enable(afc->clk); > + if (err) > + return err; > + > + val = FLEX_MR_OPMODE(afc->opmode), > + writel(val, afc->base + FLEX_MR); > + > + clk_disable_unprepare(afc->clk); > + > + return 0; > +} > +#endif > + > +static SIMPLE_DEV_PM_OPS(atmel_flexcom_pm_ops, NULL, > + atmel_flexcom_resume); > + > static struct platform_driver atmel_flexcom_driver = { > .probe = atmel_flexcom_probe, > .driver = { > .name = "atmel_flexcom", > + .pm = &atmel_flexcom_pm_ops, > .of_match_table = atmel_flexcom_of_match, > }, > }; > -- Nicolas Ferre -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 8/9] atmel_flexcom: Support backup mode
The controller used by a flexcom module is configured at boot, and left alone after this. As the configuration will be lost after backup mode, restore the state of the flexcom driver on resume. Signed-off-by: Romain Izard --- drivers/mfd/atmel-flexcom.c | 65 ++--- 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/drivers/mfd/atmel-flexcom.c b/drivers/mfd/atmel-flexcom.c index 064bde9cff5a..ef1235c4a179 100644 --- a/drivers/mfd/atmel-flexcom.c +++ b/drivers/mfd/atmel-flexcom.c @@ -39,34 +39,44 @@ #define FLEX_MR_OPMODE(opmode) (((opmode) << FLEX_MR_OPMODE_OFFSET) & \ FLEX_MR_OPMODE_MASK) +struct atmel_flexcom { + void __iomem *base; + u32 opmode; + struct clk *clk; +}; static int atmel_flexcom_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; - struct clk *clk; struct resource *res; - void __iomem *base; - u32 opmode; + struct atmel_flexcom *afc; int err; + u32 val; + + afc = devm_kzalloc(&pdev->dev, sizeof(*afc), GFP_KERNEL); + if (!afc) + return -ENOMEM; - err = of_property_read_u32(np, "atmel,flexcom-mode", &opmode); + platform_set_drvdata(pdev, afc); + + err = of_property_read_u32(np, "atmel,flexcom-mode", &afc->opmode); if (err) return err; - if (opmode < ATMEL_FLEXCOM_MODE_USART || - opmode > ATMEL_FLEXCOM_MODE_TWI) + if (afc->opmode < ATMEL_FLEXCOM_MODE_USART || + afc->opmode > ATMEL_FLEXCOM_MODE_TWI) return -EINVAL; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(base)) - return PTR_ERR(base); + afc->base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(afc->base)) + return PTR_ERR(afc->base); - clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(clk)) - return PTR_ERR(clk); + afc->clk = devm_clk_get(&pdev->dev, NULL); + if (IS_ERR(afc->clk)) + return PTR_ERR(afc->clk); - err = clk_prepare_enable(clk); + err = clk_prepare_enable(afc->clk); if (err) return err; @@ -76,9 +86,10 @@ static int atmel_flexcom_probe(struct platform_device *pdev) * inaccessible and are read as zero. Also the external I/O lines of the * Flexcom are muxed to reach the selected device. */ - writel(FLEX_MR_OPMODE(opmode), base + FLEX_MR); + val = FLEX_MR_OPMODE(afc->opmode); + writel(val, afc->base + FLEX_MR); - clk_disable_unprepare(clk); + clk_disable_unprepare(afc->clk); return devm_of_platform_populate(&pdev->dev); } @@ -89,10 +100,34 @@ static const struct of_device_id atmel_flexcom_of_match[] = { }; MODULE_DEVICE_TABLE(of, atmel_flexcom_of_match); +#ifdef CONFIG_PM_SLEEP +static int atmel_flexcom_resume(struct device *dev) +{ + struct atmel_flexcom *afc = dev_get_drvdata(dev); + int err; + u32 val; + + err = clk_prepare_enable(afc->clk); + if (err) + return err; + + val = FLEX_MR_OPMODE(afc->opmode), + writel(val, afc->base + FLEX_MR); + + clk_disable_unprepare(afc->clk); + + return 0; +} +#endif + +static SIMPLE_DEV_PM_OPS(atmel_flexcom_pm_ops, NULL, +atmel_flexcom_resume); + static struct platform_driver atmel_flexcom_driver = { .probe = atmel_flexcom_probe, .driver = { .name = "atmel_flexcom", + .pm = &atmel_flexcom_pm_ops, .of_match_table = atmel_flexcom_of_match, }, }; -- 2.11.0 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html