blob: 2b76066e89f70931dc7b105bf1a213b11dd6bb42 [file] [log] [blame]
Arvind M8e87d852018-01-29 00:04:29 -08001From 4a46eb644f621efe247f649640aa0b394f211fe7 Mon Sep 17 00:00:00 2001
Allen Martin685e0f82016-07-26 19:34:29 -07002From: Alexandre Belloni <alexandre.belloni@free-electrons.com>
3Date: Wed, 30 Sep 2015 12:57:10 +0200
Arvind M10268e72017-12-04 22:18:06 -08004Subject: [PATCH 318/366] usb: gadget: atmel: access the PMC using regmap
Allen Martin685e0f82016-07-26 19:34:29 -07005
6Use regmap to access the PMC to avoid using at91_pmc_read and
7at91_pmc_write.
8
9Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
10Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
11Acked-by: Felipe Balbi <balbi@ti.com>
12Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Allen Martin685e0f82016-07-26 19:34:29 -070013---
14 drivers/usb/gadget/udc/atmel_usba_udc.c | 20 ++++++++++----------
15 drivers/usb/gadget/udc/atmel_usba_udc.h | 2 ++
16 2 files changed, 12 insertions(+), 10 deletions(-)
17
18diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
Ishan Mittalb7998262017-01-17 16:11:50 +053019index f92f5af..f9bba26 100644
Allen Martin685e0f82016-07-26 19:34:29 -070020--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
21+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
22@@ -17,7 +17,9 @@
23 #include <linux/device.h>
24 #include <linux/dma-mapping.h>
25 #include <linux/list.h>
26+#include <linux/mfd/syscon.h>
27 #include <linux/platform_device.h>
28+#include <linux/regmap.h>
29 #include <linux/usb/ch9.h>
30 #include <linux/usb/gadget.h>
31 #include <linux/usb/atmel_usba_udc.h>
32@@ -1888,20 +1890,15 @@ static int atmel_usba_stop(struct usb_gadget *gadget)
33 #ifdef CONFIG_OF
34 static void at91sam9rl_toggle_bias(struct usba_udc *udc, int is_on)
35 {
36- unsigned int uckr = at91_pmc_read(AT91_CKGR_UCKR);
37-
38- if (is_on)
39- at91_pmc_write(AT91_CKGR_UCKR, uckr | AT91_PMC_BIASEN);
40- else
41- at91_pmc_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN));
42+ regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN,
43+ is_on ? AT91_PMC_BIASEN : 0);
44 }
45
46 static void at91sam9g45_pulse_bias(struct usba_udc *udc)
47 {
48- unsigned int uckr = at91_pmc_read(AT91_CKGR_UCKR);
49-
50- at91_pmc_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN));
51- at91_pmc_write(AT91_CKGR_UCKR, uckr | AT91_PMC_BIASEN);
52+ regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN, 0);
53+ regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN,
54+ AT91_PMC_BIASEN);
55 }
56
57 static const struct usba_udc_errata at91sam9rl_errata = {
58@@ -1938,6 +1935,9 @@ static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev,
59 return ERR_PTR(-EINVAL);
60
61 udc->errata = match->data;
62+ udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9g45-pmc");
63+ if (udc->errata && IS_ERR(udc->pmc))
64+ return ERR_CAST(udc->pmc);
65
66 udc->num_ep = 0;
67
68diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h
Ishan Mittalb7998262017-01-17 16:11:50 +053069index ea448a3..3e1c9d5 100644
Allen Martin685e0f82016-07-26 19:34:29 -070070--- a/drivers/usb/gadget/udc/atmel_usba_udc.h
71+++ b/drivers/usb/gadget/udc/atmel_usba_udc.h
72@@ -354,6 +354,8 @@ struct usba_udc {
73 struct dentry *debugfs_root;
74 struct dentry *debugfs_regs;
75 #endif
76+
77+ struct regmap *pmc;
78 };
79
80 static inline struct usba_ep *to_usba_ep(struct usb_ep *ep)
81--
Arvind M10268e72017-12-04 22:18:06 -0800821.9.1
Allen Martin685e0f82016-07-26 19:34:29 -070083