usb: dwc_otg_310: fix usb vbus power controlled by pmic
[firefly-linux-kernel-4.4.55.git] / drivers / usb / dwc_otg_310 / usbdev_rkuoc.h
1 #ifndef __USBDEV_RKUOC_H
2 #define _USBDEV_RKUOC_H
3
4 typedef union uoc_field {
5         u32 array[3];
6         struct {
7                 u32 offset;
8                 u32 bitmap;
9                 u32 mask;
10         } b;
11 } uoc_field_t;
12
13 static inline void grf_uoc_set(void *base, u32 offset, u8 bitmap, u8 mask,
14                                u32 value)
15 {
16         /* printk("bc_debug:set addr %p val = 0x%08x\n",
17          *        ((u32*)(base + offset)),(((((1 << mask) - 1) & value)
18          *        | (((1 << mask) - 1) << 16))<< bitmap));*/
19         *((u32 *) (base + offset)) =
20             (((((1 << mask) - 1) & value) | (((1 << mask) -
21                                               1) << 16)) << bitmap);
22 }
23
24 static inline u32 grf_uoc_get(void *base, u32 offset, u32 bitmap, u32 mask)
25 {
26         u32 ret;
27         /* printk("bc_debug:get addr %p bit %d val = 0x%08x\n",
28          *        (u32*)(base + offset), bitmap,
29          *        *((u32*)(base + offset))); */
30         ret = (*((u32 *) (base + offset)) >> bitmap) & ((1 << mask) - 1);
31         return ret;
32 }
33
34 static inline void regmap_grf_uoc_set(struct regmap *grf, u32 offset,
35                                       u32 bitmap, u32 mask, u32 val)
36 {
37         unsigned int reg_val;
38
39         reg_val = (((((1 << mask) - 1) & val) |
40                    (((1 << mask) - 1) << 16)) << bitmap);
41         regmap_write(grf, offset, reg_val);
42 }
43
44 static inline u32 regmap_grf_uoc_get(struct regmap *grf, u32 offset,
45                                      u32 bitmap, u32 mask)
46 {
47         unsigned int ret;
48
49         regmap_read(grf, offset, &ret);
50         ret = (ret >> bitmap) & ((1 << mask) - 1);
51         return ret;
52 }
53
54 static inline bool uoc_field_valid(uoc_field_t *f)
55 {
56         if ((f->b.bitmap < 32) && (f->b.mask < 32))
57                 return true;
58         else {
59                 printk("%s field invalid\n", __func__);
60                 return false;
61         }
62 }
63
64 #endif