1af873fceSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2ab78029eSLinus Walleij /* 3ab78029eSLinus Walleij * Per-device information from the pin control system. 4ab78029eSLinus Walleij * This is the stuff that get included into the device 5ab78029eSLinus Walleij * core. 6ab78029eSLinus Walleij * 7ab78029eSLinus Walleij * Copyright (C) 2012 ST-Ericsson SA 8ab78029eSLinus Walleij * Written on behalf of Linaro for ST-Ericsson 9ab78029eSLinus Walleij * This interface is used in the core to keep track of pins. 10ab78029eSLinus Walleij * 11ab78029eSLinus Walleij * Author: Linus Walleij <[email protected]> 12ab78029eSLinus Walleij */ 13ab78029eSLinus Walleij 14ab78029eSLinus Walleij #ifndef PINCTRL_DEVINFO_H 15ab78029eSLinus Walleij #define PINCTRL_DEVINFO_H 16ab78029eSLinus Walleij 17e5530adcSAndy Shevchenko struct device; 18e5530adcSAndy Shevchenko 19ab78029eSLinus Walleij #ifdef CONFIG_PINCTRL 20ab78029eSLinus Walleij 21*13e80244SHanna Hawa #include <linux/device.h> 22*13e80244SHanna Hawa 23ab78029eSLinus Walleij /* The device core acts as a consumer toward pinctrl */ 24ab78029eSLinus Walleij #include <linux/pinctrl/consumer.h> 25ab78029eSLinus Walleij 26e5530adcSAndy Shevchenko struct pinctrl; 27e5530adcSAndy Shevchenko 28ab78029eSLinus Walleij /** 29ab78029eSLinus Walleij * struct dev_pin_info - pin state container for devices 30ab78029eSLinus Walleij * @p: pinctrl handle for the containing device 31ab78029eSLinus Walleij * @default_state: the default state for the handle, if found 32ef0eebc0SDouglas Anderson * @init_state: the state at probe time, if found 33ef0eebc0SDouglas Anderson * @sleep_state: the state at suspend time, if found 34ef0eebc0SDouglas Anderson * @idle_state: the state at idle (runtime suspend) time, if found 35ab78029eSLinus Walleij */ 36ab78029eSLinus Walleij struct dev_pin_info { 37ab78029eSLinus Walleij struct pinctrl *p; 38ab78029eSLinus Walleij struct pinctrl_state *default_state; 39ef0eebc0SDouglas Anderson struct pinctrl_state *init_state; 4014005ee2SLinus Walleij #ifdef CONFIG_PM 4114005ee2SLinus Walleij struct pinctrl_state *sleep_state; 4214005ee2SLinus Walleij struct pinctrl_state *idle_state; 4314005ee2SLinus Walleij #endif 44ab78029eSLinus Walleij }; 45ab78029eSLinus Walleij 46ab78029eSLinus Walleij extern int pinctrl_bind_pins(struct device *dev); 47ef0eebc0SDouglas Anderson extern int pinctrl_init_done(struct device *dev); 48ab78029eSLinus Walleij dev_pinctrl(struct device * dev)49*13e80244SHanna Hawastatic inline struct pinctrl *dev_pinctrl(struct device *dev) 50*13e80244SHanna Hawa { 51*13e80244SHanna Hawa if (!dev->pins) 52*13e80244SHanna Hawa return NULL; 53*13e80244SHanna Hawa 54*13e80244SHanna Hawa return dev->pins->p; 55*13e80244SHanna Hawa } 56*13e80244SHanna Hawa 57ab78029eSLinus Walleij #else 58ab78029eSLinus Walleij 59ab78029eSLinus Walleij /* Stubs if we're not using pinctrl */ 60ab78029eSLinus Walleij pinctrl_bind_pins(struct device * dev)61ab78029eSLinus Walleijstatic inline int pinctrl_bind_pins(struct device *dev) 62ab78029eSLinus Walleij { 63ab78029eSLinus Walleij return 0; 64ab78029eSLinus Walleij } 65ab78029eSLinus Walleij pinctrl_init_done(struct device * dev)66ef0eebc0SDouglas Andersonstatic inline int pinctrl_init_done(struct device *dev) 67ef0eebc0SDouglas Anderson { 68ef0eebc0SDouglas Anderson return 0; 69ef0eebc0SDouglas Anderson } 70ef0eebc0SDouglas Anderson dev_pinctrl(struct device * dev)71*13e80244SHanna Hawastatic inline struct pinctrl *dev_pinctrl(struct device *dev) 72*13e80244SHanna Hawa { 73*13e80244SHanna Hawa return NULL; 74*13e80244SHanna Hawa } 75*13e80244SHanna Hawa 76ab78029eSLinus Walleij #endif /* CONFIG_PINCTRL */ 77ab78029eSLinus Walleij #endif /* PINCTRL_DEVINFO_H */ 78