xref: /aosp_15_r20/external/coreboot/src/drivers/i2c/cs35l53/chip.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __DRIVERS_I2C_CS35L53_CHIP_H__
4 #define __DRIVERS_I2C_CS35L53_CHIP_H__
5 
6 #include <acpi/acpi_device.h>
7 
8 #define CS35L53_MAX_GPIOS 2
9 
10 enum cs35l53_boost_type {
11 	INTERNAL_BOOST = 0,
12 	EXTERNAL_BOOST = 1,
13 };
14 
15 enum cs35l53_boost_ind_nanohenrys {
16 	BOOST_IND_1000_NH = 1000,
17 	BOOST_IND_1200_NH = 1200,
18 	BOOST_IND_1500_NH = 1500,
19 	BOOST_IND_2200_NH = 2200,
20 };
21 
22 enum cs35l53_asp_sdout_hiz {
23 	ASP_SDOUT_LOGIC0_UNUSED_LOGIC0_DISABLED = 0,
24 	ASP_SDOUT_HIZ_UNUSED_LOGIC0_DISABLED = 1,
25 	ASP_SDOUT_LOGIC0_UNUSED_HIZ_DISABLED = 2,
26 	ASP_SDOUT_HIZ_UNUSED_HIZ_DISABLED = 3,
27 };
28 
29 enum cs35l53_gpio1_src {
30 	GPIO1_SRC_HIGH_IMPEDANCE = 0,
31 	GPIO1_SRC_GPIO = 1,
32 	GPIO1_SRC_SYNC = 2,
33 	GPIO1_SRC_MCLK_INPUT = 3,
34 };
35 
36 enum cs35l53_gpio2_src {
37 	GPIO2_SRC_HIGH_IMPEDANCE = 0,
38 	GPIO2_SRC_GPIO = 1,
39 	GPIO2_SRC_OPEN_DRAIN = 2,
40 	GPIO2_SRC_MCLK_INPUT = 3,
41 	GPIO2_SRC_PUSH_PULL_INTB = 4,
42 	GPIO2_SRC_PUSH_PULL_INT = 5,
43 };
44 
45 /*
46  * Cirrus Logic  CS35L53 Audio Codec devicetree bindings
47  * linux/Documentation/devicetree/bindings/sound/cirrus,cs35l53.yaml
48  */
49 struct drivers_i2c_cs35l53_config {
50 	const char *name; /* ACPI Device Name */
51 
52 	const char *sub; /* SUB ID to uniquely identify system */
53 
54 	/* Device Description */
55 	const char *desc;
56 
57 	/* Identifier for chips */
58 	uint32_t uid;
59 
60 	/* Interrupt configuration */
61 	struct acpi_irq irq;
62 
63 	/* Use GPIO based interrupt instead of PIRQ */
64 	struct acpi_gpio irq_gpio;
65 
66 	/* Use GPIO based reset gpio */
67 	struct acpi_gpio reset_gpio;
68 
69 	/* I2C Bus Frequency in Hertz (default 400kHz) */
70 	unsigned int bus_speed;
71 
72 	/* Define cs35l53 parameters */
73 	/*
74 	 * cirrus,boost-type : Configures the type of Boost being used.
75 	 * Internal boost requires boost-peak-milliamp, boost-ind-nanohenry and
76 	 * boost-cap-microfarad.
77 	 * External Boost must have GPIO1 as GPIO output. GPIO1 will be set high to
78 	 * enable boost voltage.
79 	 */
80 	enum cs35l53_boost_type boost_type;
81 
82 	/*
83 	 * cirrus,boost-peak-milliamp : Boost-converter peak current limit in mA.
84 	 * Configures the peak current by monitoring the current through the boost FET.
85 	 * Range starts at 1600 mA and goes to a maximum of 4500 mA with increments
86 	 * of 50 mA. See section 4.3.6 of the datasheet for details.
87 	 */
88 	unsigned int boost_peak_milliamp;
89 
90 	/*
91 	 * cirrus,boost-ind-nanohenry : Boost inductor value, expressed in nH. Valid
92 	 * values include 1000, 1200, 1500 and 2200.
93 	 */
94 	enum cs35l53_boost_ind_nanohenrys boost_ind_nanohenry;
95 
96 	/*
97 	 * cirrus,boost-cap-microfarad : Total equivalent boost capacitance on the VBST
98 	 * and VAMP pins, derated at 11 volts DC. The value must be rounded to the
99 	 * nearest integer and expressed in uF.
100 	 */
101 	unsigned int boost_cap_microfarad;
102 
103 	/*
104 	 * cirrus,asp-sdout-hiz : Audio serial port SDOUT Hi-Z control. Sets the Hi-Z
105 	 * configuration for SDOUT pin of amplifier.
106 	 * 0 = Logic 0 during unused slots, and while all transmit channels disabled
107 	 * 1 = Hi-Z during unused slots but logic 0 while all transmit channels disabled
108 	 * 2 = Logic 0 during unused slots, but Hi-Z while all transmit channels disabled
109 	 * 3 = Hi-Z during unused slots and while all transmit channels disabled
110 	 */
111 	enum cs35l53_asp_sdout_hiz asp_sdout_hiz;
112 
113 	/*
114 	 * cirrus,gpio1-polarity-invert : Boolean which specifies whether the GPIO1
115 	 * level is inverted.
116 	 */
117 	bool gpio1_polarity_invert;
118 
119 	/*
120 	 * cirrus,gpio2-polarity-invert : Boolean which specifies whether the GPIO2
121 	 * level is inverted.
122 	 */
123 	bool gpio2_polarity_invert;
124 
125 	/*
126 	 * cirrus,gpio1-output-enable : Boolean which specifies whether the GPIO1 pin
127 	 * is configured as an output.
128 	 */
129 	bool gpio1_output_enable;
130 
131 	/*
132 	 * cirrus,gpio2-output-enable : Boolean which specifies whether the GPIO2 pin
133 	 * is configured as an output.
134 	 */
135 	bool gpio2_output_enable;
136 
137 	/*
138 	 * cirrus,gpio1-src-select : Configures the function of the GPIO1 pin.
139 	 * GPIO1:
140 	 * 0 = High Impedance (Default)
141 	 * 1 = GPIO
142 	 * 2 = Sync
143 	 * 3 = MCLK input
144 	 */
145 	enum cs35l53_gpio1_src gpio1_src_select;
146 
147 	/*
148 	 * cirrus,gpio2-src-select : Configures the function of the GPIO2 pin.
149 	 * GPIO2:
150 	 * 0 = High Impedance (Default)
151 	 * 1 = GPIO
152 	 * 2 = Open Drain INTB
153 	 * 3 = MCLK input
154 	 * 4 = Push-pull INTB (active low)
155 	 * 5 = Push-pull INT (active high)
156 	 */
157 	enum cs35l53_gpio2_src gpio2_src_select;
158 };
159 
160 #endif /* __DRIVERS_I2C_CS35L53_CHIP_H__ */
161