1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Driver header file for pin controller driver |
4 | * Copyright (C) 2017 Spreadtrum - http://www.spreadtrum.com |
5 | */ |
6 | |
7 | #ifndef __PINCTRL_SPRD_H__ |
8 | #define __PINCTRL_SPRD_H__ |
9 | |
10 | struct platform_device; |
11 | |
12 | #define NUM_OFFSET (20) |
13 | #define TYPE_OFFSET (16) |
14 | #define BIT_OFFSET (8) |
15 | #define WIDTH_OFFSET (4) |
16 | |
17 | #define SPRD_PIN_INFO(num, type, offset, width, reg) \ |
18 | (((num) & 0xFFF) << NUM_OFFSET | \ |
19 | ((type) & 0xF) << TYPE_OFFSET | \ |
20 | ((offset) & 0xFF) << BIT_OFFSET | \ |
21 | ((width) & 0xF) << WIDTH_OFFSET | \ |
22 | ((reg) & 0xF)) |
23 | |
24 | #define SPRD_PINCTRL_PIN(pin) SPRD_PINCTRL_PIN_DATA(pin, #pin) |
25 | |
26 | #define SPRD_PINCTRL_PIN_DATA(a, b) \ |
27 | { \ |
28 | .name = b, \ |
29 | .num = (((a) >> NUM_OFFSET) & 0xfff), \ |
30 | .type = (((a) >> TYPE_OFFSET) & 0xf), \ |
31 | .bit_offset = (((a) >> BIT_OFFSET) & 0xff), \ |
32 | .bit_width = ((a) >> WIDTH_OFFSET & 0xf), \ |
33 | .reg = ((a) & 0xf) \ |
34 | } |
35 | |
36 | enum pin_type { |
37 | GLOBAL_CTRL_PIN, |
38 | COMMON_PIN, |
39 | MISC_PIN, |
40 | }; |
41 | |
42 | struct sprd_pins_info { |
43 | const char *name; |
44 | unsigned int num; |
45 | enum pin_type type; |
46 | |
47 | /* for global control pins configuration */ |
48 | unsigned long bit_offset; |
49 | unsigned long bit_width; |
50 | unsigned int reg; |
51 | }; |
52 | |
53 | int sprd_pinctrl_core_probe(struct platform_device *pdev, |
54 | struct sprd_pins_info *sprd_soc_pin_info, |
55 | int pins_cnt); |
56 | void sprd_pinctrl_remove(struct platform_device *pdev); |
57 | void sprd_pinctrl_shutdown(struct platform_device *pdev); |
58 | |
59 | #endif /* __PINCTRL_SPRD_H__ */ |
60 | |