| /* Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 and |
| * only version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| */ |
| |
| #ifndef __PMIC8058_OTHC_H__ |
| #define __PMIC8058_OTHC_H__ |
| |
| /* Accessory detecion flags */ |
| #define OTHC_MICBIAS_DETECT BIT(0) |
| #define OTHC_GPIO_DETECT BIT(1) |
| #define OTHC_SWITCH_DETECT BIT(2) |
| #define OTHC_ADC_DETECT BIT(3) |
| |
| enum othc_accessory_type { |
| OTHC_NO_DEVICE = 0, |
| OTHC_HEADSET = 1 << 0, |
| OTHC_HEADPHONE = 1 << 1, |
| OTHC_MICROPHONE = 1 << 2, |
| OTHC_ANC_HEADSET = 1 << 3, |
| OTHC_ANC_HEADPHONE = 1 << 4, |
| OTHC_ANC_MICROPHONE = 1 << 5, |
| OTHC_SVIDEO_OUT = 1 << 6, |
| }; |
| |
| struct accessory_adc_thres { |
| int min_threshold; |
| int max_threshold; |
| }; |
| |
| struct othc_accessory_info { |
| unsigned int accessory; |
| unsigned int detect_flags; |
| unsigned int gpio; |
| unsigned int active_low; |
| unsigned int key_code; |
| bool enabled; |
| struct accessory_adc_thres adc_thres; |
| }; |
| |
| enum othc_headset_type { |
| OTHC_HEADSET_NO, |
| OTHC_HEADSET_NC, |
| }; |
| |
| struct othc_regulator_config { |
| const char *regulator; |
| unsigned int max_uV; |
| unsigned int min_uV; |
| }; |
| |
| /* Signal control for OTHC module */ |
| enum othc_micbias_enable { |
| /* Turn off MICBIAS signal */ |
| OTHC_SIGNAL_OFF, |
| /* Turn on MICBIAS signal when TCXO is enabled */ |
| OTHC_SIGNAL_TCXO, |
| /* Turn on MICBIAS signal when PWM is high or TCXO is enabled */ |
| OTHC_SIGNAL_PWM_TCXO, |
| /* MICBIAS always enabled */ |
| OTHC_SIGNAL_ALWAYS_ON, |
| }; |
| |
| /* Number of MICBIAS lines supported by PMIC8058 */ |
| enum othc_micbias { |
| OTHC_MICBIAS_0, |
| OTHC_MICBIAS_1, |
| OTHC_MICBIAS_2, |
| OTHC_MICBIAS_MAX, |
| }; |
| |
| enum othc_micbias_capability { |
| /* MICBIAS used only for BIAS with on/off capability */ |
| OTHC_MICBIAS, |
| /* MICBIAS used to support HSED functionality */ |
| OTHC_MICBIAS_HSED, |
| }; |
| |
| struct othc_switch_info { |
| u32 min_adc_threshold; |
| u32 max_adc_threshold; |
| u32 key_code; |
| }; |
| |
| struct othc_n_switch_config { |
| u32 voltage_settling_time_ms; |
| u8 num_adc_samples; |
| uint32_t adc_channel; |
| struct othc_switch_info *switch_info; |
| u8 num_keys; |
| bool default_sw_en; |
| u8 default_sw_idx; |
| }; |
| |
| struct hsed_bias_config { |
| enum othc_headset_type othc_headset; |
| u16 othc_lowcurr_thresh_uA; |
| u16 othc_highcurr_thresh_uA; |
| u32 othc_hyst_prediv_us; |
| u32 othc_period_clkdiv_us; |
| u32 othc_hyst_clk_us; |
| u32 othc_period_clk_us; |
| int othc_wakeup; |
| }; |
| |
| /* Configuration data for HSED */ |
| struct othc_hsed_config { |
| struct hsed_bias_config *hsed_bias_config; |
| unsigned long detection_delay_ms; |
| /* Switch configuration */ |
| unsigned long switch_debounce_ms; |
| bool othc_support_n_switch; /* Set if supporting > 1 switch */ |
| struct othc_n_switch_config *switch_config; |
| /* Accessory configuration */ |
| bool accessories_support; |
| bool accessories_adc_support; |
| uint32_t accessories_adc_channel; |
| struct othc_accessory_info *accessories; |
| int othc_num_accessories; |
| int video_out_gpio; |
| int ir_gpio; |
| }; |
| |
| struct pmic8058_othc_config_pdata { |
| enum othc_micbias micbias_select; |
| enum othc_micbias_enable micbias_enable; |
| enum othc_micbias_capability micbias_capability; |
| struct othc_hsed_config *hsed_config; |
| const char *hsed_name; |
| struct othc_regulator_config *micbias_regulator; |
| }; |
| |
| int pm8058_micbias_enable(enum othc_micbias micbias, |
| enum othc_micbias_enable enable); |
| int pm8058_othc_svideo_enable(enum othc_micbias micbias, |
| bool enable); |
| |
| #endif /* __PMIC8058_OTHC_H__ */ |