linux/drivers/pinctrl/pinmux.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Internal interface between the core pin control system and the
   4 * pinmux portions
   5 *
   6 * Copyright (C) 2011 ST-Ericsson SA
   7 * Written on behalf of Linaro for ST-Ericsson
   8 * Based on bits of regulator core, gpio core and clk core
   9 *
  10 * Author: Linus Walleij <linus.walleij@linaro.org>
  11 */
  12#ifdef CONFIG_PINMUX
  13
  14int pinmux_check_ops(struct pinctrl_dev *pctldev);
  15
  16int pinmux_validate_map(const struct pinctrl_map *map, int i);
  17
  18bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned pin);
  19
  20int pinmux_request_gpio(struct pinctrl_dev *pctldev,
  21                        struct pinctrl_gpio_range *range,
  22                        unsigned pin, unsigned gpio);
  23void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
  24                      struct pinctrl_gpio_range *range);
  25int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
  26                          struct pinctrl_gpio_range *range,
  27                          unsigned pin, bool input);
  28
  29int pinmux_map_to_setting(const struct pinctrl_map *map,
  30                          struct pinctrl_setting *setting);
  31void pinmux_free_setting(const struct pinctrl_setting *setting);
  32int pinmux_enable_setting(const struct pinctrl_setting *setting);
  33void pinmux_disable_setting(const struct pinctrl_setting *setting);
  34
  35#else
  36
  37static inline int pinmux_check_ops(struct pinctrl_dev *pctldev)
  38{
  39        return 0;
  40}
  41
  42static inline int pinmux_validate_map(const struct pinctrl_map *map, int i)
  43{
  44        return 0;
  45}
  46
  47static inline bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev,
  48                                               unsigned pin)
  49{
  50        return true;
  51}
  52
  53static inline int pinmux_request_gpio(struct pinctrl_dev *pctldev,
  54                        struct pinctrl_gpio_range *range,
  55                        unsigned pin, unsigned gpio)
  56{
  57        return 0;
  58}
  59
  60static inline void pinmux_free_gpio(struct pinctrl_dev *pctldev,
  61                                    unsigned pin,
  62                                    struct pinctrl_gpio_range *range)
  63{
  64}
  65
  66static inline int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
  67                                        struct pinctrl_gpio_range *range,
  68                                        unsigned pin, bool input)
  69{
  70        return 0;
  71}
  72
  73static inline int pinmux_map_to_setting(const struct pinctrl_map *map,
  74                          struct pinctrl_setting *setting)
  75{
  76        return 0;
  77}
  78
  79static inline void pinmux_free_setting(const struct pinctrl_setting *setting)
  80{
  81}
  82
  83static inline int pinmux_enable_setting(const struct pinctrl_setting *setting)
  84{
  85        return 0;
  86}
  87
  88static inline void pinmux_disable_setting(const struct pinctrl_setting *setting)
  89{
  90}
  91
  92#endif
  93
  94#if defined(CONFIG_PINMUX) && defined(CONFIG_DEBUG_FS)
  95
  96void pinmux_show_map(struct seq_file *s, const struct pinctrl_map *map);
  97void pinmux_show_setting(struct seq_file *s,
  98                         const struct pinctrl_setting *setting);
  99void pinmux_init_device_debugfs(struct dentry *devroot,
 100                                struct pinctrl_dev *pctldev);
 101
 102#else
 103
 104static inline void pinmux_show_map(struct seq_file *s,
 105                                   const struct pinctrl_map *map)
 106{
 107}
 108
 109static inline void pinmux_show_setting(struct seq_file *s,
 110                                       const struct pinctrl_setting *setting)
 111{
 112}
 113
 114static inline void pinmux_init_device_debugfs(struct dentry *devroot,
 115                                              struct pinctrl_dev *pctldev)
 116{
 117}
 118
 119#endif
 120
 121#ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
 122
 123/**
 124 * struct function_desc - generic function descriptor
 125 * @name: name of the function
 126 * @group_names: array of pin group names
 127 * @num_group_names: number of pin group names
 128 * @data: pin controller driver specific data
 129 */
 130struct function_desc {
 131        const char *name;
 132        const char * const *group_names;
 133        int num_group_names;
 134        void *data;
 135};
 136
 137int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev);
 138
 139const char *
 140pinmux_generic_get_function_name(struct pinctrl_dev *pctldev,
 141                                 unsigned int selector);
 142
 143int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev,
 144                                       unsigned int selector,
 145                                       const char * const **groups,
 146                                       unsigned * const num_groups);
 147
 148struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev,
 149                                                  unsigned int selector);
 150
 151int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
 152                                const char *name,
 153                                const char * const *groups,
 154                                unsigned const num_groups,
 155                                void *data);
 156
 157int pinmux_generic_remove_function(struct pinctrl_dev *pctldev,
 158                                   unsigned int selector);
 159
 160void pinmux_generic_free_functions(struct pinctrl_dev *pctldev);
 161
 162#else
 163
 164static inline void pinmux_generic_free_functions(struct pinctrl_dev *pctldev)
 165{
 166}
 167
 168#endif /* CONFIG_GENERIC_PINMUX_FUNCTIONS */
 169