/* * Platform data for Madera codecs * * Copyright 2017 Cirrus Logic * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef EXTCON_MADERA_PDATA_H #define EXTCON_MADERA_PDATA_H #include #define MADERA_MAX_ACCESSORY 1 /* Treat INT_MAX impedance as open circuit */ #define MADERA_HP_Z_OPEN INT_MAX struct madera_jd_state; /** Bias and sense configuration for probing MICDET */ struct madera_micd_config { /** cs47l35, cs47l85, WM1840: value of the ACCDET_SRC field * other codecs: value of MICDn_SENSE_SEL field * See datasheet for field values */ u32 src; /** cs47l35, cs47l85, wm1840: unused * other codecs: value of MICDn_GND_SEL * * See datasheet for field values */ u32 gnd; /** MICBIAS number to enable */ u32 bias; /** State of polarity gpio during probe (true == gpio asserted) */ bool gpio; /** cs47l35, cs47l85, wm1840: unused * other codecs: value of HPn_GND_SEL * * See datasheet for field values */ u32 hp_gnd; }; struct madera_micd_range { int max; /** Ohms */ int key; /** Key to report to input layer */ }; /** pdata sub-structure for accessory detect configuration */ struct madera_accdet_pdata { /** set to true to enable this accessory detect */ bool enabled; /** which output this accdet is for (1 = OUT1, ...) */ u32 output; /** Time in milliseconds to keep wake lock during jack detection */ u32 jd_wake_time; /** Set whether JD2 is used for jack detection */ bool jd_use_jd2; /** set to true if jackdet contact opens on insert */ bool jd_invert; /** If non-zero don't run headphone detection, just report this value * Specified as hundredths-of-an-ohm, that is (ohms * 100) */ u32 fixed_hpdet_imp_x100; /** Impedance of external series resistor on hpdet. * Specified as hundredths-of-an-ohm, that is (ohms * 100) */ u32 hpdet_ext_res_x100; /** If non-zero, specifies the maximum impedance in ohms * that will be considered as a short circuit. */ u32 hpdet_short_circuit_imp; /** * Channel to use for headphone detection, valid values are 0 for * left and 1 for right */ u32 hpdet_channel; /** Extra debounce timeout during initial mic detect (milliseconds) */ u32 micd_detect_debounce_ms; /** Extra software debounces during button detection */ u32 micd_manual_debounce; /** GPIO for mic detection polarity */ int micd_pol_gpio; /** Mic detect ramp rate */ u32 micd_bias_start_time; /** Setting for the codec MICD_RATE field * See the datasheet for documentation of the field values */ u32 micd_rate; /** Mic detect debounce level */ u32 micd_dbtime; /** Mic detect timeout (milliseconds) */ u32 micd_timeout_ms; /** Mic detect clamp function */ u32 micd_clamp_mode; /** Force MICBIAS on for mic detect */ bool micd_force_micbias; /** Declare an open circuit as a 4 pole jack */ bool micd_open_circuit_declare; /** Use software comparison to determine mic presence */ bool micd_software_compare; /** Mic detect level parameters */ const struct madera_micd_range *micd_ranges; int num_micd_ranges; /** Headset polarity configurations */ const struct madera_micd_config *micd_configs; int num_micd_configs; /** * 4 entries: * [HPL_clamp_pin, HPL_impedance_measurement_pin, * HPR_clamp_pin, HPR_impedance_measurement_pin] * * 0 = use default setting * values 0x1..0xffff = set to this value * >0xffff = set to 0 */ u32 hpd_pins[4]; /** Delay between jack detection and any further action (milliseconds) */ u32 init_delay; /** * Specify an input to mute during headset button presses: * 1 - IN1L, 2 - IN1R, ..., n - IN[n]R */ u32 hs_mic; /** Moisture detection pin */ u32 moisture_pin; /** Moisture detection impedance threshold */ u32 moisture_imp; /** Number of debounces to perform on moisture detection */ u32 moisture_debounce; /** Override the normal jack detection */ const struct madera_jd_state *custom_jd; }; #endif