linux/drivers/pinctrl/freescale/pinctrl-mxs.h
<<
>>
Prefs
   1/*
   2 * Copyright 2012 Freescale Semiconductor, Inc.
   3 *
   4 * The code contained herein is licensed under the GNU General Public
   5 * License. You may obtain a copy of the GNU General Public License
   6 * Version 2 or later at the following locations:
   7 *
   8 * http://www.opensource.org/licenses/gpl-license.html
   9 * http://www.gnu.org/copyleft/gpl.html
  10 */
  11
  12#ifndef __PINCTRL_MXS_H
  13#define __PINCTRL_MXS_H
  14
  15#include <linux/platform_device.h>
  16#include <linux/pinctrl/pinctrl.h>
  17
  18#define SET     0x4
  19#define CLR     0x8
  20#define TOG     0xc
  21
  22#define MXS_PINCTRL_PIN(pin)    PINCTRL_PIN(pin, #pin)
  23#define PINID(bank, pin)        ((bank) * 32 + (pin))
  24
  25/*
  26 * pinmux-id bit field definitions
  27 *
  28 * bank:        15..12  (4)
  29 * pin:         11..4   (8)
  30 * muxsel:      3..0    (4)
  31 */
  32#define MUXID_TO_PINID(m)       PINID((m) >> 12 & 0xf, (m) >> 4 & 0xff)
  33#define MUXID_TO_MUXSEL(m)      ((m) & 0xf)
  34
  35#define PINID_TO_BANK(p)        ((p) >> 5)
  36#define PINID_TO_PIN(p)         ((p) % 32)
  37
  38/*
  39 * pin config bit field definitions
  40 *
  41 * pull-up:     6..5    (2)
  42 * voltage:     4..3    (2)
  43 * mA:          2..0    (3)
  44 *
  45 * MSB of each field is presence bit for the config.
  46 */
  47#define PULL_PRESENT            (1 << 6)
  48#define PULL_SHIFT              5
  49#define VOL_PRESENT             (1 << 4)
  50#define VOL_SHIFT               3
  51#define MA_PRESENT              (1 << 2)
  52#define MA_SHIFT                0
  53#define CONFIG_TO_PULL(c)       ((c) >> PULL_SHIFT & 0x1)
  54#define CONFIG_TO_VOL(c)        ((c) >> VOL_SHIFT & 0x1)
  55#define CONFIG_TO_MA(c)         ((c) >> MA_SHIFT & 0x3)
  56
  57struct mxs_function {
  58        const char *name;
  59        const char **groups;
  60        unsigned ngroups;
  61};
  62
  63struct mxs_group {
  64        const char *name;
  65        unsigned int *pins;
  66        unsigned npins;
  67        u8 *muxsel;
  68        u8 config;
  69};
  70
  71struct mxs_regs {
  72        u16 muxsel;
  73        u16 drive;
  74        u16 pull;
  75};
  76
  77struct mxs_pinctrl_soc_data {
  78        const struct mxs_regs *regs;
  79        const struct pinctrl_pin_desc *pins;
  80        unsigned npins;
  81        struct mxs_function *functions;
  82        unsigned nfunctions;
  83        struct mxs_group *groups;
  84        unsigned ngroups;
  85};
  86
  87int mxs_pinctrl_probe(struct platform_device *pdev,
  88                      struct mxs_pinctrl_soc_data *soc);
  89int mxs_pinctrl_remove(struct platform_device *pdev);
  90
  91#endif /* __PINCTRL_MXS_H */
  92