1*607f2c00SIvan Vecera /* SPDX-License-Identifier: GPL-2.0-only */ 2*607f2c00SIvan Vecera 3*607f2c00SIvan Vecera #ifndef _ZL3073X_OUT_H 4*607f2c00SIvan Vecera #define _ZL3073X_OUT_H 5*607f2c00SIvan Vecera 6*607f2c00SIvan Vecera #include <linux/bitfield.h> 7*607f2c00SIvan Vecera #include <linux/types.h> 8*607f2c00SIvan Vecera 9*607f2c00SIvan Vecera #include "regs.h" 10*607f2c00SIvan Vecera 11*607f2c00SIvan Vecera struct zl3073x_dev; 12*607f2c00SIvan Vecera 13*607f2c00SIvan Vecera /** 14*607f2c00SIvan Vecera * struct zl3073x_out - output state 15*607f2c00SIvan Vecera * @ctrl: output control 16*607f2c00SIvan Vecera * @mode: output mode 17*607f2c00SIvan Vecera */ 18*607f2c00SIvan Vecera struct zl3073x_out { 19*607f2c00SIvan Vecera u8 ctrl; 20*607f2c00SIvan Vecera u8 mode; 21*607f2c00SIvan Vecera }; 22*607f2c00SIvan Vecera 23*607f2c00SIvan Vecera int zl3073x_out_state_fetch(struct zl3073x_dev *zldev, u8 index); 24*607f2c00SIvan Vecera const struct zl3073x_out *zl3073x_out_state_get(struct zl3073x_dev *zldev, 25*607f2c00SIvan Vecera u8 index); 26*607f2c00SIvan Vecera 27*607f2c00SIvan Vecera /** 28*607f2c00SIvan Vecera * zl3073x_out_signal_format_get - get output signal format 29*607f2c00SIvan Vecera * @out: pointer to out state 30*607f2c00SIvan Vecera * 31*607f2c00SIvan Vecera * Return: signal format of given output 32*607f2c00SIvan Vecera */ 33*607f2c00SIvan Vecera static inline u8 zl3073x_out_signal_format_get(const struct zl3073x_out *out) 34*607f2c00SIvan Vecera { 35*607f2c00SIvan Vecera return FIELD_GET(ZL_OUTPUT_MODE_SIGNAL_FORMAT, out->mode); 36*607f2c00SIvan Vecera } 37*607f2c00SIvan Vecera 38*607f2c00SIvan Vecera /** 39*607f2c00SIvan Vecera * zl3073x_out_is_diff - check if the given output is differential 40*607f2c00SIvan Vecera * @out: pointer to out state 41*607f2c00SIvan Vecera * 42*607f2c00SIvan Vecera * Return: true if output is differential, false if output is single-ended 43*607f2c00SIvan Vecera */ 44*607f2c00SIvan Vecera static inline bool zl3073x_out_is_diff(const struct zl3073x_out *out) 45*607f2c00SIvan Vecera { 46*607f2c00SIvan Vecera switch (zl3073x_out_signal_format_get(out)) { 47*607f2c00SIvan Vecera case ZL_OUTPUT_MODE_SIGNAL_FORMAT_LVDS: 48*607f2c00SIvan Vecera case ZL_OUTPUT_MODE_SIGNAL_FORMAT_DIFF: 49*607f2c00SIvan Vecera case ZL_OUTPUT_MODE_SIGNAL_FORMAT_LOWVCM: 50*607f2c00SIvan Vecera return true; 51*607f2c00SIvan Vecera default: 52*607f2c00SIvan Vecera break; 53*607f2c00SIvan Vecera } 54*607f2c00SIvan Vecera 55*607f2c00SIvan Vecera return false; 56*607f2c00SIvan Vecera } 57*607f2c00SIvan Vecera 58*607f2c00SIvan Vecera /** 59*607f2c00SIvan Vecera * zl3073x_out_is_enabled - check if the given output is enabled 60*607f2c00SIvan Vecera * @out: pointer to out state 61*607f2c00SIvan Vecera * 62*607f2c00SIvan Vecera * Return: true if output is enabled, false if output is disabled 63*607f2c00SIvan Vecera */ 64*607f2c00SIvan Vecera static inline bool zl3073x_out_is_enabled(const struct zl3073x_out *out) 65*607f2c00SIvan Vecera { 66*607f2c00SIvan Vecera return !!FIELD_GET(ZL_OUTPUT_CTRL_EN, out->ctrl); 67*607f2c00SIvan Vecera } 68*607f2c00SIvan Vecera 69*607f2c00SIvan Vecera /** 70*607f2c00SIvan Vecera * zl3073x_out_synth_get - get synth connected to given output 71*607f2c00SIvan Vecera * @out: pointer to out state 72*607f2c00SIvan Vecera * 73*607f2c00SIvan Vecera * Return: index of synth connected to given output. 74*607f2c00SIvan Vecera */ 75*607f2c00SIvan Vecera static inline u8 zl3073x_out_synth_get(const struct zl3073x_out *out) 76*607f2c00SIvan Vecera { 77*607f2c00SIvan Vecera return FIELD_GET(ZL_OUTPUT_CTRL_SYNTH_SEL, out->ctrl); 78*607f2c00SIvan Vecera } 79*607f2c00SIvan Vecera 80*607f2c00SIvan Vecera #endif /* _ZL3073X_OUT_H */ 81