linux/drivers/pinctrl/sprd/pinctrl-sprd.h
<<
>>
Prefs
   1/*
   2 * Driver header file for pin controller driver
   3 * Copyright (C) 2017 Spreadtrum  - http://www.spreadtrum.com
   4 *
   5 * This program is free software; you can redistribute it and/or
   6 * modify it under the terms of the GNU General Public License
   7 * version 2 as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it will be useful, but
  10 * WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12 * General Public License for more details.
  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        /* for global control pins configuration */
  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 /* __PINCTRL_SPRD_H__ */
  68