linux/drivers/pinctrl/sprd/pinctrl-sprd.h
<<
>>
Prefs
   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
  10struct 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
  36enum pin_type {
  37        GLOBAL_CTRL_PIN,
  38        COMMON_PIN,
  39        MISC_PIN,
  40};
  41
  42struct 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
  53int sprd_pinctrl_core_probe(struct platform_device *pdev,
  54                            struct sprd_pins_info *sprd_soc_pin_info,
  55                            int pins_cnt);
  56int sprd_pinctrl_remove(struct platform_device *pdev);
  57void sprd_pinctrl_shutdown(struct platform_device *pdev);
  58
  59#endif /* __PINCTRL_SPRD_H__ */
  60