linux/include/linux/pinctrl/consumer.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Consumer interface the pin control subsystem
   4 *
   5 * Copyright (C) 2012 ST-Ericsson SA
   6 * Written on behalf of Linaro for ST-Ericsson
   7 * Based on bits of regulator core, gpio core and clk core
   8 *
   9 * Author: Linus Walleij <linus.walleij@linaro.org>
  10 */
  11#ifndef __LINUX_PINCTRL_CONSUMER_H
  12#define __LINUX_PINCTRL_CONSUMER_H
  13
  14#include <linux/err.h>
  15#include <linux/list.h>
  16#include <linux/seq_file.h>
  17#include <linux/pinctrl/pinctrl-state.h>
  18
  19/* This struct is private to the core and should be regarded as a cookie */
  20struct pinctrl;
  21struct pinctrl_state;
  22struct device;
  23
  24#ifdef CONFIG_PINCTRL
  25
  26/* External interface to pin control */
  27extern int pinctrl_gpio_request(unsigned gpio);
  28extern void pinctrl_gpio_free(unsigned gpio);
  29extern int pinctrl_gpio_direction_input(unsigned gpio);
  30extern int pinctrl_gpio_direction_output(unsigned gpio);
  31extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config);
  32
  33extern struct pinctrl * __must_check pinctrl_get(struct device *dev);
  34extern void pinctrl_put(struct pinctrl *p);
  35extern struct pinctrl_state * __must_check pinctrl_lookup_state(
  36                                                        struct pinctrl *p,
  37                                                        const char *name);
  38extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
  39
  40extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
  41extern void devm_pinctrl_put(struct pinctrl *p);
  42
  43#ifdef CONFIG_PM
  44extern int pinctrl_pm_select_default_state(struct device *dev);
  45extern int pinctrl_pm_select_sleep_state(struct device *dev);
  46extern int pinctrl_pm_select_idle_state(struct device *dev);
  47#else
  48static inline int pinctrl_pm_select_default_state(struct device *dev)
  49{
  50        return 0;
  51}
  52static inline int pinctrl_pm_select_sleep_state(struct device *dev)
  53{
  54        return 0;
  55}
  56static inline int pinctrl_pm_select_idle_state(struct device *dev)
  57{
  58        return 0;
  59}
  60#endif
  61
  62#else /* !CONFIG_PINCTRL */
  63
  64static inline int pinctrl_gpio_request(unsigned gpio)
  65{
  66        return 0;
  67}
  68
  69static inline void pinctrl_gpio_free(unsigned gpio)
  70{
  71}
  72
  73static inline int pinctrl_gpio_direction_input(unsigned gpio)
  74{
  75        return 0;
  76}
  77
  78static inline int pinctrl_gpio_direction_output(unsigned gpio)
  79{
  80        return 0;
  81}
  82
  83static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
  84{
  85        return 0;
  86}
  87
  88static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
  89{
  90        return NULL;
  91}
  92
  93static inline void pinctrl_put(struct pinctrl *p)
  94{
  95}
  96
  97static inline struct pinctrl_state * __must_check pinctrl_lookup_state(
  98                                                        struct pinctrl *p,
  99                                                        const char *name)
 100{
 101        return NULL;
 102}
 103
 104static inline int pinctrl_select_state(struct pinctrl *p,
 105                                       struct pinctrl_state *s)
 106{
 107        return 0;
 108}
 109
 110static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
 111{
 112        return NULL;
 113}
 114
 115static inline void devm_pinctrl_put(struct pinctrl *p)
 116{
 117}
 118
 119static inline int pinctrl_pm_select_default_state(struct device *dev)
 120{
 121        return 0;
 122}
 123
 124static inline int pinctrl_pm_select_sleep_state(struct device *dev)
 125{
 126        return 0;
 127}
 128
 129static inline int pinctrl_pm_select_idle_state(struct device *dev)
 130{
 131        return 0;
 132}
 133
 134#endif /* CONFIG_PINCTRL */
 135
 136static inline struct pinctrl * __must_check pinctrl_get_select(
 137                                        struct device *dev, const char *name)
 138{
 139        struct pinctrl *p;
 140        struct pinctrl_state *s;
 141        int ret;
 142
 143        p = pinctrl_get(dev);
 144        if (IS_ERR(p))
 145                return p;
 146
 147        s = pinctrl_lookup_state(p, name);
 148        if (IS_ERR(s)) {
 149                pinctrl_put(p);
 150                return ERR_CAST(s);
 151        }
 152
 153        ret = pinctrl_select_state(p, s);
 154        if (ret < 0) {
 155                pinctrl_put(p);
 156                return ERR_PTR(ret);
 157        }
 158
 159        return p;
 160}
 161
 162static inline struct pinctrl * __must_check pinctrl_get_select_default(
 163                                        struct device *dev)
 164{
 165        return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
 166}
 167
 168static inline struct pinctrl * __must_check devm_pinctrl_get_select(
 169                                        struct device *dev, const char *name)
 170{
 171        struct pinctrl *p;
 172        struct pinctrl_state *s;
 173        int ret;
 174
 175        p = devm_pinctrl_get(dev);
 176        if (IS_ERR(p))
 177                return p;
 178
 179        s = pinctrl_lookup_state(p, name);
 180        if (IS_ERR(s)) {
 181                devm_pinctrl_put(p);
 182                return ERR_CAST(s);
 183        }
 184
 185        ret = pinctrl_select_state(p, s);
 186        if (ret < 0) {
 187                devm_pinctrl_put(p);
 188                return ERR_PTR(ret);
 189        }
 190
 191        return p;
 192}
 193
 194static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(
 195                                        struct device *dev)
 196{
 197        return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
 198}
 199
 200#endif /* __LINUX_PINCTRL_CONSUMER_H */
 201