cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

consumer.h (4631B)


      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 bool pinctrl_gpio_can_use_line(unsigned gpio);
     28extern int pinctrl_gpio_request(unsigned gpio);
     29extern void pinctrl_gpio_free(unsigned gpio);
     30extern int pinctrl_gpio_direction_input(unsigned gpio);
     31extern int pinctrl_gpio_direction_output(unsigned gpio);
     32extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config);
     33
     34extern struct pinctrl * __must_check pinctrl_get(struct device *dev);
     35extern void pinctrl_put(struct pinctrl *p);
     36extern struct pinctrl_state * __must_check pinctrl_lookup_state(
     37							struct pinctrl *p,
     38							const char *name);
     39extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
     40
     41extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
     42extern void devm_pinctrl_put(struct pinctrl *p);
     43extern int pinctrl_select_default_state(struct device *dev);
     44
     45#ifdef CONFIG_PM
     46extern int pinctrl_pm_select_default_state(struct device *dev);
     47extern int pinctrl_pm_select_sleep_state(struct device *dev);
     48extern int pinctrl_pm_select_idle_state(struct device *dev);
     49#else
     50static inline int pinctrl_pm_select_default_state(struct device *dev)
     51{
     52	return 0;
     53}
     54static inline int pinctrl_pm_select_sleep_state(struct device *dev)
     55{
     56	return 0;
     57}
     58static inline int pinctrl_pm_select_idle_state(struct device *dev)
     59{
     60	return 0;
     61}
     62#endif
     63
     64#else /* !CONFIG_PINCTRL */
     65
     66static inline bool pinctrl_gpio_can_use_line(unsigned gpio)
     67{
     68	return true;
     69}
     70
     71static inline int pinctrl_gpio_request(unsigned gpio)
     72{
     73	return 0;
     74}
     75
     76static inline void pinctrl_gpio_free(unsigned gpio)
     77{
     78}
     79
     80static inline int pinctrl_gpio_direction_input(unsigned gpio)
     81{
     82	return 0;
     83}
     84
     85static inline int pinctrl_gpio_direction_output(unsigned gpio)
     86{
     87	return 0;
     88}
     89
     90static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
     91{
     92	return 0;
     93}
     94
     95static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
     96{
     97	return NULL;
     98}
     99
    100static inline void pinctrl_put(struct pinctrl *p)
    101{
    102}
    103
    104static inline struct pinctrl_state * __must_check pinctrl_lookup_state(
    105							struct pinctrl *p,
    106							const char *name)
    107{
    108	return NULL;
    109}
    110
    111static inline int pinctrl_select_state(struct pinctrl *p,
    112				       struct pinctrl_state *s)
    113{
    114	return 0;
    115}
    116
    117static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
    118{
    119	return NULL;
    120}
    121
    122static inline void devm_pinctrl_put(struct pinctrl *p)
    123{
    124}
    125
    126static inline int pinctrl_select_default_state(struct device *dev)
    127{
    128	return 0;
    129}
    130
    131static inline int pinctrl_pm_select_default_state(struct device *dev)
    132{
    133	return 0;
    134}
    135
    136static inline int pinctrl_pm_select_sleep_state(struct device *dev)
    137{
    138	return 0;
    139}
    140
    141static inline int pinctrl_pm_select_idle_state(struct device *dev)
    142{
    143	return 0;
    144}
    145
    146#endif /* CONFIG_PINCTRL */
    147
    148static inline struct pinctrl * __must_check pinctrl_get_select(
    149					struct device *dev, const char *name)
    150{
    151	struct pinctrl *p;
    152	struct pinctrl_state *s;
    153	int ret;
    154
    155	p = pinctrl_get(dev);
    156	if (IS_ERR(p))
    157		return p;
    158
    159	s = pinctrl_lookup_state(p, name);
    160	if (IS_ERR(s)) {
    161		pinctrl_put(p);
    162		return ERR_CAST(s);
    163	}
    164
    165	ret = pinctrl_select_state(p, s);
    166	if (ret < 0) {
    167		pinctrl_put(p);
    168		return ERR_PTR(ret);
    169	}
    170
    171	return p;
    172}
    173
    174static inline struct pinctrl * __must_check pinctrl_get_select_default(
    175					struct device *dev)
    176{
    177	return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
    178}
    179
    180static inline struct pinctrl * __must_check devm_pinctrl_get_select(
    181					struct device *dev, const char *name)
    182{
    183	struct pinctrl *p;
    184	struct pinctrl_state *s;
    185	int ret;
    186
    187	p = devm_pinctrl_get(dev);
    188	if (IS_ERR(p))
    189		return p;
    190
    191	s = pinctrl_lookup_state(p, name);
    192	if (IS_ERR(s)) {
    193		devm_pinctrl_put(p);
    194		return ERR_CAST(s);
    195	}
    196
    197	ret = pinctrl_select_state(p, s);
    198	if (ret < 0) {
    199		devm_pinctrl_put(p);
    200		return ERR_PTR(ret);
    201	}
    202
    203	return p;
    204}
    205
    206static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(
    207					struct device *dev)
    208{
    209	return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
    210}
    211
    212#endif /* __LINUX_PINCTRL_CONSUMER_H */