1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#ifndef __PINCTRL_SPRD_H__
16#define __PINCTRL_SPRD_H__
17
18struct platform_device;
19
20#define NUM_OFFSET (20)
21#define TYPE_OFFSET (16)
22#define BIT_OFFSET (8)
23#define WIDTH_OFFSET (4)
24
25#define SPRD_PIN_INFO(num, type, offset, width, reg) \
26 (((num) & 0xFFF) << NUM_OFFSET | \
27 ((type) & 0xF) << TYPE_OFFSET | \
28 ((offset) & 0xFF) << BIT_OFFSET | \
29 ((width) & 0xF) << WIDTH_OFFSET | \
30 ((reg) & 0xF))
31
32#define SPRD_PINCTRL_PIN(pin) SPRD_PINCTRL_PIN_DATA(pin, #pin)
33
34#define SPRD_PINCTRL_PIN_DATA(a, b) \
35 { \
36 .name = b, \
37 .num = (((a) >> NUM_OFFSET) & 0xfff), \
38 .type = (((a) >> TYPE_OFFSET) & 0xf), \
39 .bit_offset = (((a) >> BIT_OFFSET) & 0xff), \
40 .bit_width = ((a) >> WIDTH_OFFSET & 0xf), \
41 .reg = ((a) & 0xf) \
42 }
43
44enum pin_type {
45 GLOBAL_CTRL_PIN,
46 COMMON_PIN,
47 MISC_PIN,
48};
49
50struct sprd_pins_info {
51 const char *name;
52 unsigned int num;
53 enum pin_type type;
54
55
56 unsigned long bit_offset;
57 unsigned long bit_width;
58 unsigned int reg;
59};
60
61int sprd_pinctrl_core_probe(struct platform_device *pdev,
62 struct sprd_pins_info *sprd_soc_pin_info,
63 int pins_cnt);
64int sprd_pinctrl_remove(struct platform_device *pdev);
65void sprd_pinctrl_shutdown(struct platform_device *pdev);
66
67#endif
68