blob: 4b7c2e931aae0761b384b3970447943aa422584a [file] [log] [blame]
/*
* 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 <linux/kernel.h>
#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