blob: 8631666e0c813b9c9cc8758a258ad3729864790e [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
#include <acpi/acpi_device.h>
#define CS35L53_MAX_GPIOS 2
enum cs35l53_boost_type {
INTERNAL_BOOST = 0,
EXTERNAL_BOOST = 1,
};
enum cs35l53_boost_ind_nanohenrys {
BOOST_IND_1000_NH = 1000,
BOOST_IND_1200_NH = 1200,
BOOST_IND_1500_NH = 1500,
BOOST_IND_2200_NH = 2200,
};
enum cs35l53_asp_sdout_hiz {
ASP_SDOUT_LOGIC0_UNUSED_LOGIC0_DISABLED = 0,
ASP_SDOUT_HIZ_UNUSED_LOGIC0_DISABLED = 1,
ASP_SDOUT_LOGIC0_UNUSED_HIZ_DISABLED = 2,
ASP_SDOUT_HIZ_UNUSED_HIZ_DISABLED = 3,
};
enum cs35l53_gpio1_src {
GPIO1_SRC_HIGH_IMPEDANCE = 0,
GPIO1_SRC_GPIO = 1,
GPIO1_SRC_SYNC = 2,
GPIO1_SRC_MCLK_INPUT = 3,
};
enum cs35l53_gpio2_src {
GPIO2_SRC_HIGH_IMPEDANCE = 0,
GPIO2_SRC_GPIO = 1,
GPIO2_SRC_OPEN_DRAIN = 2,
GPIO2_SRC_MCLK_INPUT = 3,
GPIO2_SRC_PUSH_PULL_INTB = 4,
GPIO2_SRC_PUSH_PULL_INT = 5,
};
/*
* Cirrus Logic CS35L53 Audio Codec devicetree bindings
* linux/Documentation/devicetree/bindings/sound/cirrus,cs35l53.yaml
*/
struct drivers_i2c_cs35l53_config {
const char *name; /* ACPI Device Name */
const char *sub; /* SUB ID to uniquely identify system */
/* Device Description */
const char *desc;
/* Identifier for chips */
uint32_t uid;
/* Interrupt configuration */
struct acpi_irq irq;
/* Use GPIO based interrupt instead of PIRQ */
struct acpi_gpio irq_gpio;
/* Use GPIO based reset gpio */
struct acpi_gpio reset_gpio;
/* I2C Bus Frequency in Hertz (default 400kHz) */
unsigned int bus_speed;
/* Define cs35l53 parameters */
/*
* cirrus,boost-type : Configures the type of Boost being used.
* Internal boost requires boost-peak-milliamp, boost-ind-nanohenry and
* boost-cap-microfarad.
* External Boost must have GPIO1 as GPIO output. GPIO1 will be set high to
* enable boost voltage.
*/
enum cs35l53_boost_type boost_type;
/*
* cirrus,boost-peak-milliamp : Boost-converter peak current limit in mA.
* Configures the peak current by monitoring the current through the boost FET.
* Range starts at 1600 mA and goes to a maximum of 4500 mA with increments
* of 50 mA. See section 4.3.6 of the datasheet for details.
*/
unsigned int boost_peak_milliamp;
/*
* cirrus,boost-ind-nanohenry : Boost inductor value, expressed in nH. Valid
* values include 1000, 1200, 1500 and 2200.
*/
enum cs35l53_boost_ind_nanohenrys boost_ind_nanohenry;
/*
* cirrus,boost-cap-microfarad : Total equivalent boost capacitance on the VBST
* and VAMP pins, derated at 11 volts DC. The value must be rounded to the
* nearest integer and expressed in uF.
*/
unsigned int boost_cap_microfarad;
/*
* cirrus,asp-sdout-hiz : Audio serial port SDOUT Hi-Z control. Sets the Hi-Z
* configuration for SDOUT pin of amplifier.
* 0 = Logic 0 during unused slots, and while all transmit channels disabled
* 1 = Hi-Z during unused slots but logic 0 while all transmit channels disabled
* 2 = Logic 0 during unused slots, but Hi-Z while all transmit channels disabled
* 3 = Hi-Z during unused slots and while all transmit channels disabled
*/
enum cs35l53_asp_sdout_hiz asp_sdout_hiz;
/*
* cirrus,gpio1-polarity-invert : Boolean which specifies whether the GPIO1
* level is inverted.
*/
bool gpio1_polarity_invert;
/*
* cirrus,gpio2-polarity-invert : Boolean which specifies whether the GPIO2
* level is inverted.
*/
bool gpio2_polarity_invert;
/*
* cirrus,gpio1-output-enable : Boolean which specifies whether the GPIO1 pin
* is configured as an output.
*/
bool gpio1_output_enable;
/*
* cirrus,gpio2-output-enable : Boolean which specifies whether the GPIO2 pin
* is configured as an output.
*/
bool gpio2_output_enable;
/*
* cirrus,gpio1-src-select : Configures the function of the GPIO1 pin.
* GPIO1:
* 0 = High Impedance (Default)
* 1 = GPIO
* 2 = Sync
* 3 = MCLK input
*/
enum cs35l53_gpio1_src gpio1_src_select;
/*
* cirrus,gpio2-src-select : Configures the function of the GPIO2 pin.
* GPIO2:
* 0 = High Impedance (Default)
* 1 = GPIO
* 2 = Open Drain INTB
* 3 = MCLK input
* 4 = Push-pull INTB (active low)
* 5 = Push-pull INT (active high)
*/
enum cs35l53_gpio2_src gpio2_src_select;
};