Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Driver header file for pin controller driver
0004  * Copyright (C) 2017 Spreadtrum  - http://www.spreadtrum.com
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     /* for global control pins configuration */
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 /* __PINCTRL_SPRD_H__ */