[PATCH v4 2/7] mux: Add helper functions for getting optional and selected mux-state
Josua Mayer
josua at solid-run.com
Wed Jan 7 23:42:39 PST 2026
On Wednesday, 31 December 2025 21:18:51 IST kernel test robot wrote:
> Hi Josua,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on 8f0b4cce4481fb22653697cced8d0d04027cb1e8]
>
> url:
> https://github.com/intel-lab-lkp/linux/commits/Josua-Mayer/phy-can-transcei
> ver-rename-temporary-helper-function-to-avoid-conflict/20251229-223153 base:
> 8f0b4cce4481fb22653697cced8d0d04027cb1e8
> patch link:
> https://lore.kernel.org/r/20251229-rz-sdio-mux-v4-2-a023e55758fe%40solid-ru
> n.com patch subject: [PATCH v4 2/7] mux: Add helper functions for getting
> optional and selected mux-state config: parisc-randconfig-002-20260101
> (https://download.01.org/0day-ci/archive/20260101/202601010305.tpY47HE4-lkp
> @intel.com/config) compiler: hppa-linux-gcc (GCC) 10.5.0
> reproduce (this is a W=1 build):
> (https://download.01.org/0day-ci/archive/20260101/202601010305.tpY47HE4-lkp
> @intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version
> of the same patch/commit), kindly add following tags
>
> | Reported-by: kernel test robot <lkp at intel.com>
> | Closes:
> | https://lore.kernel.org/oe-kbuild-all/202601010305.tpY47HE4-lkp@intel.com
> | /
> All error/warnings (new ones prefixed by >>):
>
> In file included from drivers/mux/core.c:19:
>
> include/linux/mux/consumer.h: In function 'mux_control_put':
> >> include/linux/mux/consumer.h:138:9: warning: 'return' with a value, in
> >> function returning void [-Wreturn-type]
> 138 | return -EOPNOTSUPP;
>
> | ^
>
To be fixed in next version
> include/linux/mux/consumer.h:136:20: note: declared here
> 136 | static inline void mux_control_put(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~
>
> drivers/mux/core.c: At top level:
> >> drivers/mux/core.c:302:14: error: redefinition of 'mux_control_states'
>
> 302 | unsigned int mux_control_states(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:70:28: note: previous definition of
> 'mux_control_states' was here 70 | static inline unsigned int
> mux_control_states(struct mux_control *mux)
> | ^~~~~~~~~~~~~~~~~~
I don't understand how this is possible.
In the header file line 136 the inline declaration for mux_control_states is
gated by ifdef CONFIG_MULTIPLEXER else case.
The build of mux/core.c itself is gated in Makefile by CONFIG_MULTIPLEXER.
So mux/core.c is not being built when CONFIG_MULTIPLEXER is not set.
If it is set, we hit in the header file the non-inline declaration near start
of the file.
> >>
> >> drivers/mux/core.c:365:5: error: redefinition of
> >> 'mux_control_select_delay'
>
> 365 | int mux_control_select_delay(struct mux_control *mux, unsigned
> int state,
> | ^~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:74:32: note: previous definition of
> 'mux_control_select_delay' was here 74 | static inline int __must_check
> mux_control_select_delay(struct mux_control *mux,
> | ^~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:403:5: error: redefinition of 'mux_state_select_delay'
>
> 403 | int mux_state_select_delay(struct mux_state *mstate, unsigned int
> delay_us)
> | ^~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:79:32: note: previous definition of
> 'mux_state_select_delay' was here 79 | static inline int __must_check
> mux_state_select_delay(struct mux_state *mstate,
> | ^~~~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:425:5: error: redefinition of
> >> 'mux_control_try_select_delay'
> 425 | int mux_control_try_select_delay(struct mux_control *mux,
> unsigned int state,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:84:32: note: previous definition of
> 'mux_control_try_select_delay' was here 84 | static inline int __must_check
> mux_control_try_select_delay(struct mux_control *mux,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:459:5: error: redefinition of
> >> 'mux_state_try_select_delay'
> 459 | int mux_state_try_select_delay(struct mux_state *mstate, unsigned
> int delay_us)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:90:32: note: previous definition of
> 'mux_state_try_select_delay' was here 90 | static inline int __must_check
> mux_state_try_select_delay(struct mux_state *mstate,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:477:5: error: redefinition of 'mux_control_deselect'
>
> 477 | int mux_control_deselect(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:118:19: note: previous definition of
> 'mux_control_deselect' was here 118 | static inline int
> mux_control_deselect(struct mux_control *mux)
> | ^~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:503:5: error: redefinition of 'mux_state_deselect'
>
> 503 | int mux_state_deselect(struct mux_state *mstate)
>
> | ^~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:122:19: note: previous definition of
> 'mux_state_deselect' was here 122 | static inline int
> mux_state_deselect(struct mux_state *mstate)
> | ^~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:625:21: error: redefinition of 'mux_control_get'
>
> 625 | struct mux_control *mux_control_get(struct device *dev, const
> char *mux_name)
> | ^~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:127:35: note: previous definition of
> 'mux_control_get' was here 127 | static inline struct mux_control
> *mux_control_get(struct device *dev, const char *mux_name)
> | ^~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:638:21: error: redefinition of
> >> 'mux_control_get_optional'
> 638 | struct mux_control *mux_control_get_optional(struct device *dev,
> const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:131:35: note: previous definition of
> 'mux_control_get_optional' was here 131 | static inline struct mux_control
> *mux_control_get_optional(struct device *dev,
> | ^~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:650:6: error: redefinition of 'mux_control_put'
>
> 650 | void mux_control_put(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:136:20: note: previous definition of
> 'mux_control_put' was here 136 | static inline void mux_control_put(struct
> mux_control *mux)
> | ^~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:671:21: error: redefinition of 'devm_mux_control_get'
>
> 671 | struct mux_control *devm_mux_control_get(struct device *dev,
>
> | ^~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:141:35: note: previous definition of
> 'devm_mux_control_get' was here 141 | static inline struct mux_control
> *devm_mux_control_get(struct device *dev, const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:774:19: error: redefinition of 'devm_mux_state_get'
>
> 774 | struct mux_state *devm_mux_state_get(struct device *dev, const
> char *mux_name)
> | ^~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:145:33: note: previous definition of
> 'devm_mux_state_get' was here 145 | static inline struct mux_state
> *devm_mux_state_get(struct device *dev, const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:788:19: error: redefinition of
> >> 'devm_mux_state_get_optional'
> 788 | struct mux_state *devm_mux_state_get_optional(struct device *dev,
> const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:149:33: note: previous definition of
> 'devm_mux_state_get_optional' was here 149 | static inline struct mux_state
> *devm_mux_state_get_optional(struct device *dev,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:838:19: error: redefinition of
> >> 'devm_mux_state_get_selected'
> 838 | struct mux_state *devm_mux_state_get_selected(struct device *dev,
> const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:154:33: note: previous definition of
> 'devm_mux_state_get_selected' was here 154 | static inline struct mux_state
> *devm_mux_state_get_selected(struct device *dev,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >> drivers/mux/core.c:854:19: error: redefinition of
> >> 'devm_mux_state_get_optional_selected'
> 854 | struct mux_state *devm_mux_state_get_optional_selected(struct
> device *dev,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from drivers/mux/core.c:19:
> include/linux/mux/consumer.h:159:33: note: previous definition of
> 'devm_mux_state_get_optional_selected' was here 159 | static inline struct
> mux_state *devm_mux_state_get_optional_selected(struct device *dev,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> | ~~~
>
> --
> In file included from core.c:19:
>
> include/linux/mux/consumer.h: In function 'mux_control_put':
> >> include/linux/mux/consumer.h:138:9: warning: 'return' with a value, in
> >> function returning void [-Wreturn-type]
> 138 | return -EOPNOTSUPP;
>
> | ^
>
> include/linux/mux/consumer.h:136:20: note: declared here
> 136 | static inline void mux_control_put(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~
>
> core.c: At top level:
> core.c:302:14: error: redefinition of 'mux_control_states'
> 302 | unsigned int mux_control_states(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:70:28: note: previous definition of
> 'mux_control_states' was here 70 | static inline unsigned int
> mux_control_states(struct mux_control *mux)
> | ^~~~~~~~~~~~~~~~~~
>
> core.c:365:5: error: redefinition of 'mux_control_select_delay'
> 365 | int mux_control_select_delay(struct mux_control *mux, unsigned
> int state,
> | ^~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:74:32: note: previous definition of
> 'mux_control_select_delay' was here 74 | static inline int __must_check
> mux_control_select_delay(struct mux_control *mux,
> | ^~~~~~~~~~~~~~~~~~~~~~~~
>
> core.c:403:5: error: redefinition of 'mux_state_select_delay'
> 403 | int mux_state_select_delay(struct mux_state *mstate, unsigned int
> delay_us)
> | ^~~~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:79:32: note: previous definition of
> 'mux_state_select_delay' was here 79 | static inline int __must_check
> mux_state_select_delay(struct mux_state *mstate,
> | ^~~~~~~~~~~~~~~~~~~~~~
>
> core.c:425:5: error: redefinition of 'mux_control_try_select_delay'
> 425 | int mux_control_try_select_delay(struct mux_control *mux,
> unsigned int state,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:84:32: note: previous definition of
> 'mux_control_try_select_delay' was here 84 | static inline int __must_check
> mux_control_try_select_delay(struct mux_control *mux,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> core.c:459:5: error: redefinition of 'mux_state_try_select_delay'
> 459 | int mux_state_try_select_delay(struct mux_state *mstate, unsigned
> int delay_us)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:90:32: note: previous definition of
> 'mux_state_try_select_delay' was here 90 | static inline int __must_check
> mux_state_try_select_delay(struct mux_state *mstate,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~
>
> core.c:477:5: error: redefinition of 'mux_control_deselect'
> 477 | int mux_control_deselect(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:118:19: note: previous definition of
> 'mux_control_deselect' was here 118 | static inline int
> mux_control_deselect(struct mux_control *mux)
> | ^~~~~~~~~~~~~~~~~~~~
>
> core.c:503:5: error: redefinition of 'mux_state_deselect'
> 503 | int mux_state_deselect(struct mux_state *mstate)
>
> | ^~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:122:19: note: previous definition of
> 'mux_state_deselect' was here 122 | static inline int
> mux_state_deselect(struct mux_state *mstate)
> | ^~~~~~~~~~~~~~~~~~
>
> core.c:625:21: error: redefinition of 'mux_control_get'
> 625 | struct mux_control *mux_control_get(struct device *dev, const
> char *mux_name)
> | ^~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:127:35: note: previous definition of
> 'mux_control_get' was here 127 | static inline struct mux_control
> *mux_control_get(struct device *dev, const char *mux_name)
> | ^~~~~~~~~~~~~~~
>
> core.c:638:21: error: redefinition of 'mux_control_get_optional'
> 638 | struct mux_control *mux_control_get_optional(struct device *dev,
> const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:131:35: note: previous definition of
> 'mux_control_get_optional' was here 131 | static inline struct mux_control
> *mux_control_get_optional(struct device *dev,
> | ^~~~~~~~~~~~~~~~~~~~~~~~
>
> core.c:650:6: error: redefinition of 'mux_control_put'
> 650 | void mux_control_put(struct mux_control *mux)
>
> | ^~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:136:20: note: previous definition of
> 'mux_control_put' was here 136 | static inline void mux_control_put(struct
> mux_control *mux)
> | ^~~~~~~~~~~~~~~
>
> core.c:671:21: error: redefinition of 'devm_mux_control_get'
> 671 | struct mux_control *devm_mux_control_get(struct device *dev,
>
> | ^~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:141:35: note: previous definition of
> 'devm_mux_control_get' was here 141 | static inline struct mux_control
> *devm_mux_control_get(struct device *dev, const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~
>
> core.c:774:19: error: redefinition of 'devm_mux_state_get'
> 774 | struct mux_state *devm_mux_state_get(struct device *dev, const
> char *mux_name)
> | ^~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:145:33: note: previous definition of
> 'devm_mux_state_get' was here 145 | static inline struct mux_state
> *devm_mux_state_get(struct device *dev, const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~
>
> core.c:788:19: error: redefinition of 'devm_mux_state_get_optional'
> 788 | struct mux_state *devm_mux_state_get_optional(struct device *dev,
> const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In file included from core.c:19:
> include/linux/mux/consumer.h:149:33: note: previous definition of
> 'devm_mux_state_get_optional' was here 149 | static inline struct mux_state
> *devm_mux_state_get_optional(struct device *dev,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> core.c:838:19: error: redefinition of 'devm_mux_state_get_selected'
> 838 | struct mux_state *devm_mux_state_get_selected(struct device *dev,
> const char *mux_name)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> vim +/mux_control_states +302 drivers/mux/core.c
>
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 295
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 296
> /** a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14
> 297 * mux_control_states() - Query the number of multiplexer states.
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 298
> * @mux: The mux-control to query. a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 299 * a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 300 * Return: The
> number of multiplexer states. a3b02a9c6591ce drivers/mux/mux-core.c Peter
> Rosin 2017-05-14 301 */ a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 @302 unsigned int mux_control_states(struct
> mux_control *mux) a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 303 { a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 304 return mux->states; a3b02a9c6591ce drivers/mux/mux-
core.c
> Peter Rosin 2017-05-14 305 } a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 306 EXPORT_SYMBOL_GPL(mux_control_states);
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 307
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 308
> /* a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 309
> * The mux->lock must be down when calling this function. a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 310 */
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 311
> static int __mux_control_select(struct mux_control *mux, int state)
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 312 {
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 313
> int ret; a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 314 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 315 if (WARN_ON(state < 0 || state >= mux->states))
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 316
> return -EINVAL; a3b02a9c6591ce drivers/mux/mux-core.c
Peter Rosin
> 2017-05-14 317 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 318 if (mux->cached_state == state) a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 319
return 0;
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 320
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 321
> ret = mux_control_set(mux, state); a3b02a9c6591ce drivers/mux/mux-
core.c
> Peter Rosin 2017-05-14 322 if (ret >= 0) a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 323
return 0;
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 324
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 325
> /* The mux update failed, try to revert if appropriate... */
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 326
> if (mux->idle_state != MUX_IDLE_AS_IS) a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 327
> mux_control_set(mux, mux->idle_state); a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 328 a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 329 return ret;
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 330 }
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 331
> 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch 2021-10-07 332
> static void mux_control_delay(struct mux_control *mux, unsigned int
> delay_us) 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch
> 2021-10-07 333 { 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch
> 2021-10-07 334 ktime_t delayend; 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 335 s64 remaining; 17b5b576ff5faf
> drivers/mux/core.c Vincent Whitchurch 2021-10-07 336 17b5b576ff5faf
> drivers/mux/core.c Vincent Whitchurch 2021-10-07 337 if (!
delay_us)
> 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch 2021-10-07 338
> return; 17b5b576ff5faf drivers/mux/core.c Vincent
Whitchurch
> 2021-10-07 339 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch
> 2021-10-07 340 delayend = ktime_add_us(mux->last_change, delay_us);
> 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch 2021-10-07 341
> remaining = ktime_us_delta(delayend, ktime_get()); 17b5b576ff5faf
> drivers/mux/core.c Vincent Whitchurch 2021-10-07 342 if (remaining
>
> 0) 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch 2021-10-07 343
> fsleep(remaining); 17b5b576ff5faf drivers/mux/core.c
Vincent
> Whitchurch 2021-10-07 344 } 17b5b576ff5faf drivers/mux/core.c Vincent
> Whitchurch 2021-10-07 345 a3b02a9c6591ce drivers/mux/mux-core.c Peter
> Rosin 2017-05-14 346 /** 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 347 * mux_control_select_delay() - Select
> the given multiplexer state. a3b02a9c6591ce drivers/mux/mux-core.c Peter
> Rosin 2017-05-14 348 * @mux: The mux-control to request a change
> of state from. a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 349 * @state: The new requested state. 17b5b576ff5faf
> drivers/mux/core.c Vincent Whitchurch 2021-10-07 350 * @delay_us:
> The time to delay (in microseconds) if the mux state is changed.
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 351
> * a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 352
> * On successfully selecting the mux-control state, it will be locked until
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 353
> * there is a call to mux_control_deselect(). If the mux-control is already
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 354
> * selected when mux_control_select() is called, the caller will be blocked
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 355
> * until mux_control_deselect() or mux_state_deselect() is called (by
> someone 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07
> 356 * else). a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 357 * a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 358 * Therefore, make sure to call mux_control_deselect()
> when the operation is a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 359 * complete and the mux-control is free for others to
> use, but do not call a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 360 * mux_control_deselect() if mux_control_select() fails.
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 361
> * a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 362
> * Return: 0 when the mux-control state has the requested state or a
> negative a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 363 * errno on error. a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 364 */ 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 @365 int mux_control_select_delay(struct
> mux_control *mux, unsigned int state, 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 366 unsigned int
delay_us)
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 367 {
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 368
> int ret; a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 369 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 370 ret = down_killable(&mux->lock); a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 371 if (ret < 0)
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 372
> return ret; a3b02a9c6591ce drivers/mux/mux-core.c Peter
Rosin
> 2017-05-14 373 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 374 ret = __mux_control_select(mux, state); 17b5b576ff5faf
> drivers/mux/core.c Vincent Whitchurch 2021-10-07 375 if (ret >= 0)
> 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch 2021-10-07 376
> mux_control_delay(mux, delay_us); a3b02a9c6591ce
drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 377 a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 378 if (ret < 0) a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 379
> up(&mux->lock); a3b02a9c6591ce drivers/mux/mux-core.c
Peter Rosin
> 2017-05-14 380 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 381 return ret; a3b02a9c6591ce drivers/mux/mux-core.c
Peter
> Rosin 2017-05-14 382 } 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 383
> EXPORT_SYMBOL_GPL(mux_control_select_delay); a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 384 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 385 /**
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 386
> * mux_state_select_delay() - Select the given multiplexer state.
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 387
> * @mstate: The mux-state to select. 84564481bc4520 drivers/mux/core.c
> Aswath Govindraju 2022-01-07 388 * @delay_us: The time to delay (in
> microseconds) if the mux state is changed. 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 389 *
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 390
> * On successfully selecting the mux-state, its mux-control will be locked
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 391
> * until there is a call to mux_state_deselect(). If the mux-control is
> already 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07
> 392 * selected when mux_state_select() is called, the caller will be
> blocked 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07
> 393 * until mux_state_deselect() or mux_control_deselect() is called (by
> someone 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07
> 394 * else). 84564481bc4520 drivers/mux/core.c Aswath Govindraju
> 2022-01-07 395 * 84564481bc4520 drivers/mux/core.c Aswath Govindraju
> 2022-01-07 396 * Therefore, make sure to call mux_state_deselect() when
> the operation is 84564481bc4520 drivers/mux/core.c Aswath Govindraju
> 2022-01-07 397 * complete and the mux-control is free for others to use,
> but do not call 84564481bc4520 drivers/mux/core.c Aswath Govindraju
> 2022-01-07 398 * mux_state_deselect() if mux_state_select() fails.
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 399
> * 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 400
> * Return: 0 when the mux-state has been selected or a negative
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 401
> * errno on error. 84564481bc4520 drivers/mux/core.c Aswath Govindraju
> 2022-01-07 402 */ 84564481bc4520 drivers/mux/core.c Aswath
> Govindraju 2022-01-07 @403 int mux_state_select_delay(struct mux_state
> *mstate, unsigned int delay_us) 84564481bc4520 drivers/mux/core.c
> Aswath Govindraju 2022-01-07 404 { 84564481bc4520 drivers/mux/core.c
> Aswath Govindraju 2022-01-07 405 return
> mux_control_select_delay(mstate->mux, mstate->state, delay_us);
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 406 }
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 407
> EXPORT_SYMBOL_GPL(mux_state_select_delay); 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 408 a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 409 /**
> 17b5b576ff5faf drivers/mux/core.c Vincent Whitchurch 2021-10-07 410
> * mux_control_try_select_delay() - Try to select the given multiplexer
> state. a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14
> 411 * @mux: The mux-control to request a change of state from.
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 412
> * @state: The new requested state. 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 413 * @delay_us: The time to delay (in
> microseconds) if the mux state is changed. a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 414 *
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 415
> * On successfully selecting the mux-control state, it will be locked until
> f22d1117b9c3e2 drivers/mux/core.c Peter Rosin 2022-01-07 416
> * mux_control_deselect() is called. a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 417 * a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 418 * Therefore,
> make sure to call mux_control_deselect() when the operation is
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 419
> * complete and the mux-control is free for others to use, but do not call
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 420
> * mux_control_deselect() if mux_control_try_select() fails. a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 421 *
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 422
> * Return: 0 when the mux-control state has the requested state or a
> negative a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 423 * errno on error. Specifically -EBUSY if the mux-control
> is contended. a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 424 */ 17b5b576ff5faf drivers/mux/core.c Vincent
> Whitchurch 2021-10-07 @425 int mux_control_try_select_delay(struct
> mux_control *mux, unsigned int state, 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 426
unsigned int delay_us)
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 427 {
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 428
> int ret; a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 429 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 430 if (down_trylock(&mux->lock)) a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 431
return -EBUSY;
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 432
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 433
> ret = __mux_control_select(mux, state); 17b5b576ff5faf drivers/mux/
core.c
> Vincent Whitchurch 2021-10-07 434 if (ret >= 0) 17b5b576ff5faf
> drivers/mux/core.c Vincent Whitchurch 2021-10-07 435
> mux_control_delay(mux, delay_us); a3b02a9c6591ce
drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 436 a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 437 if (ret < 0) a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 438
> up(&mux->lock); a3b02a9c6591ce drivers/mux/mux-core.c
Peter Rosin
> 2017-05-14 439 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 440 return ret; a3b02a9c6591ce drivers/mux/mux-core.c
Peter
> Rosin 2017-05-14 441 } 17b5b576ff5faf drivers/mux/core.c
> Vincent Whitchurch 2021-10-07 442
> EXPORT_SYMBOL_GPL(mux_control_try_select_delay); a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 443 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 444 /**
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 445
> * mux_state_try_select_delay() - Try to select the given multiplexer state.
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 446
> * @mstate: The mux-state to select. 84564481bc4520 drivers/mux/core.c
> Aswath Govindraju 2022-01-07 447 * @delay_us: The time to delay (in
> microseconds) if the mux state is changed. 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 448 *
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 449
> * On successfully selecting the mux-state, its mux-control will be locked
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 450
> * until mux_state_deselect() is called. 84564481bc4520 drivers/mux/core.c
> Aswath Govindraju 2022-01-07 451 * 84564481bc4520 drivers/mux/core.c
> Aswath Govindraju 2022-01-07 452 * Therefore, make sure to call
> mux_state_deselect() when the operation is 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 453 * complete and
> the mux-control is free for others to use, but do not call 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 454 *
> mux_state_deselect() if mux_state_try_select() fails. 84564481bc4520
> drivers/mux/core.c Aswath Govindraju 2022-01-07 455 *
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 456
> * Return: 0 when the mux-state has been selected or a negative errno on
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 457
> * error. Specifically -EBUSY if the mux-control is contended.
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 458
> */ 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 @459
> int mux_state_try_select_delay(struct mux_state *mstate, unsigned int
> delay_us) 84564481bc4520 drivers/mux/core.c Aswath Govindraju
> 2022-01-07 460 { 84564481bc4520 drivers/mux/core.c Aswath Govindraju
> 2022-01-07 461 return mux_control_try_select_delay(mstate->mux,
> mstate->state, delay_us); 84564481bc4520 drivers/mux/core.c Aswath
> Govindraju 2022-01-07 462 } 84564481bc4520 drivers/mux/core.c Aswath
> Govindraju 2022-01-07 463 EXPORT_SYMBOL_GPL(mux_state_try_select_delay);
> 84564481bc4520 drivers/mux/core.c Aswath Govindraju 2022-01-07 464
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 465
> /** a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14
> 466 * mux_control_deselect() - Deselect the previously selected
> multiplexer state. a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 467 * @mux: The mux-control to deselect. a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 468 *
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 469
> * It is required that a single call is made to mux_control_deselect() for
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 470
> * each and every successful call made to either of mux_control_select() or
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 471
> * mux_control_try_select(). a3b02a9c6591ce drivers/mux/mux-core.c Peter
> Rosin 2017-05-14 472 * a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 473 * Return: 0 on success and a negative
> errno on error. An error can only a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 474 * occur if the mux has an idle state.
> Note that even if an error occurs, the a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 475 * mux-control
> is unlocked and is thus free for the next access. a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 476 */
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 @477
> int mux_control_deselect(struct mux_control *mux) a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 478 { a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 479 int ret = 0;
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 480
> a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin 2017-05-14 481
> if (mux->idle_state != MUX_IDLE_AS_IS && a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 482
> mux->idle_state != mux->cached_state) a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 483 ret =
mux_control_set(mux,
> mux->idle_state); a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 484 a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin
> 2017-05-14 485 up(&mux->lock); a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 486 a3b02a9c6591ce drivers/mux/mux-core.c
> Peter Rosin 2017-05-14 487 return ret; a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 488 } a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 489
> EXPORT_SYMBOL_GPL(mux_control_deselect); a3b02a9c6591ce
> drivers/mux/mux-core.c Peter Rosin 2017-05-14 490
More information about the linux-phy
mailing list