0001
0002
0003
0004
0005
0006
0007 #ifndef __PINCTRL_SPRD_H__
0008 #define __PINCTRL_SPRD_H__
0009
0010 struct platform_device;
0011
0012 #define NUM_OFFSET (20)
0013 #define TYPE_OFFSET (16)
0014 #define BIT_OFFSET (8)
0015 #define WIDTH_OFFSET (4)
0016
0017 #define SPRD_PIN_INFO(num, type, offset, width, reg) \
0018 (((num) & 0xFFF) << NUM_OFFSET | \
0019 ((type) & 0xF) << TYPE_OFFSET | \
0020 ((offset) & 0xFF) << BIT_OFFSET | \
0021 ((width) & 0xF) << WIDTH_OFFSET | \
0022 ((reg) & 0xF))
0023
0024 #define SPRD_PINCTRL_PIN(pin) SPRD_PINCTRL_PIN_DATA(pin, #pin)
0025
0026 #define SPRD_PINCTRL_PIN_DATA(a, b) \
0027 { \
0028 .name = b, \
0029 .num = (((a) >> NUM_OFFSET) & 0xfff), \
0030 .type = (((a) >> TYPE_OFFSET) & 0xf), \
0031 .bit_offset = (((a) >> BIT_OFFSET) & 0xff), \
0032 .bit_width = ((a) >> WIDTH_OFFSET & 0xf), \
0033 .reg = ((a) & 0xf) \
0034 }
0035
0036 enum pin_type {
0037 GLOBAL_CTRL_PIN,
0038 COMMON_PIN,
0039 MISC_PIN,
0040 };
0041
0042 struct sprd_pins_info {
0043 const char *name;
0044 unsigned int num;
0045 enum pin_type type;
0046
0047
0048 unsigned long bit_offset;
0049 unsigned long bit_width;
0050 unsigned int reg;
0051 };
0052
0053 int sprd_pinctrl_core_probe(struct platform_device *pdev,
0054 struct sprd_pins_info *sprd_soc_pin_info,
0055 int pins_cnt);
0056 int sprd_pinctrl_remove(struct platform_device *pdev);
0057 void sprd_pinctrl_shutdown(struct platform_device *pdev);
0058
0059 #endif