10edff03dSPeter Rosin /* SPDX-License-Identifier: GPL-2.0 */
2a3b02a9cSPeter Rosin /*
3a3b02a9cSPeter Rosin * mux/consumer.h - definitions for the multiplexer consumer interface
4a3b02a9cSPeter Rosin *
5a3b02a9cSPeter Rosin * Copyright (C) 2017 Axentia Technologies AB
6a3b02a9cSPeter Rosin *
7a3b02a9cSPeter Rosin * Author: Peter Rosin <[email protected]>
8a3b02a9cSPeter Rosin */
9a3b02a9cSPeter Rosin
10a3b02a9cSPeter Rosin #ifndef _LINUX_MUX_CONSUMER_H
11a3b02a9cSPeter Rosin #define _LINUX_MUX_CONSUMER_H
12a3b02a9cSPeter Rosin
13d3cc8ca3SUlrich Hecht #include <linux/compiler.h>
14d3cc8ca3SUlrich Hecht
15a3b02a9cSPeter Rosin struct device;
16a3b02a9cSPeter Rosin struct mux_control;
17*84564481SAswath Govindraju struct mux_state;
18a3b02a9cSPeter Rosin
19a3b02a9cSPeter Rosin unsigned int mux_control_states(struct mux_control *mux);
2017b5b576SVincent Whitchurch int __must_check mux_control_select_delay(struct mux_control *mux,
2117b5b576SVincent Whitchurch unsigned int state,
2217b5b576SVincent Whitchurch unsigned int delay_us);
23*84564481SAswath Govindraju int __must_check mux_state_select_delay(struct mux_state *mstate,
24*84564481SAswath Govindraju unsigned int delay_us);
2517b5b576SVincent Whitchurch int __must_check mux_control_try_select_delay(struct mux_control *mux,
2617b5b576SVincent Whitchurch unsigned int state,
2717b5b576SVincent Whitchurch unsigned int delay_us);
28*84564481SAswath Govindraju int __must_check mux_state_try_select_delay(struct mux_state *mstate,
29*84564481SAswath Govindraju unsigned int delay_us);
3017b5b576SVincent Whitchurch
mux_control_select(struct mux_control * mux,unsigned int state)3117b5b576SVincent Whitchurch static inline int __must_check mux_control_select(struct mux_control *mux,
3217b5b576SVincent Whitchurch unsigned int state)
3317b5b576SVincent Whitchurch {
3417b5b576SVincent Whitchurch return mux_control_select_delay(mux, state, 0);
3517b5b576SVincent Whitchurch }
3617b5b576SVincent Whitchurch
mux_state_select(struct mux_state * mstate)37*84564481SAswath Govindraju static inline int __must_check mux_state_select(struct mux_state *mstate)
38*84564481SAswath Govindraju {
39*84564481SAswath Govindraju return mux_state_select_delay(mstate, 0);
40*84564481SAswath Govindraju }
41*84564481SAswath Govindraju
mux_control_try_select(struct mux_control * mux,unsigned int state)4217b5b576SVincent Whitchurch static inline int __must_check mux_control_try_select(struct mux_control *mux,
4317b5b576SVincent Whitchurch unsigned int state)
4417b5b576SVincent Whitchurch {
4517b5b576SVincent Whitchurch return mux_control_try_select_delay(mux, state, 0);
4617b5b576SVincent Whitchurch }
4717b5b576SVincent Whitchurch
mux_state_try_select(struct mux_state * mstate)48*84564481SAswath Govindraju static inline int __must_check mux_state_try_select(struct mux_state *mstate)
49*84564481SAswath Govindraju {
50*84564481SAswath Govindraju return mux_state_try_select_delay(mstate, 0);
51*84564481SAswath Govindraju }
52*84564481SAswath Govindraju
53a3b02a9cSPeter Rosin int mux_control_deselect(struct mux_control *mux);
54*84564481SAswath Govindraju int mux_state_deselect(struct mux_state *mstate);
55a3b02a9cSPeter Rosin
56a3b02a9cSPeter Rosin struct mux_control *mux_control_get(struct device *dev, const char *mux_name);
57a3b02a9cSPeter Rosin void mux_control_put(struct mux_control *mux);
58a3b02a9cSPeter Rosin
59a3b02a9cSPeter Rosin struct mux_control *devm_mux_control_get(struct device *dev,
60a3b02a9cSPeter Rosin const char *mux_name);
61*84564481SAswath Govindraju struct mux_state *devm_mux_state_get(struct device *dev,
62*84564481SAswath Govindraju const char *mux_name);
63a3b02a9cSPeter Rosin
64a3b02a9cSPeter Rosin #endif /* _LINUX_MUX_CONSUMER_H */
65