Flemmard | 9dc34f3 | 2014-01-05 00:13:45 -0800 | [diff] [blame] | 1 | #ifndef RT5501_H |
| 2 | #define RT5501_H |
| 3 | |
| 4 | #include <linux/ioctl.h> |
| 5 | #include <linux/wakelock.h> |
| 6 | |
| 7 | #define RT5501_I2C_NAME "rt5501" |
| 8 | #define SPKR_OUTPUT 0 |
| 9 | #define HEADSET_OUTPUT 1 |
| 10 | #define DUAL_OUTPUT 2 |
| 11 | #define HANDSET_OUTPUT 3 |
| 12 | #define LINEOUT_OUTPUT 4 |
| 13 | #define NO_OUTPUT 5 |
| 14 | #define MODE_CMD_LEM 9 |
| 15 | #define MAX_REG_DATA 15 |
| 16 | |
| 17 | struct rt5501_platform_data { |
| 18 | uint32_t gpio_rt5501_spk_en; |
| 19 | unsigned char spkr_cmd[7]; |
| 20 | unsigned char hsed_cmd[7]; |
| 21 | unsigned char rece_cmd[7]; |
| 22 | |
| 23 | uint32_t gpio_rt5501_spk_en_cpu; |
| 24 | }; |
| 25 | |
| 26 | struct rt5501_reg_data { |
| 27 | unsigned char addr; |
| 28 | unsigned char val; |
| 29 | }; |
| 30 | |
| 31 | struct rt5501_config { |
| 32 | unsigned int reg_len; |
| 33 | struct rt5501_reg_data reg[MAX_REG_DATA]; |
| 34 | }; |
| 35 | |
| 36 | struct rt5501_comm_data { |
| 37 | unsigned int out_mode; |
| 38 | struct rt5501_config config; |
| 39 | }; |
| 40 | |
| 41 | struct rt5501_config_data { |
| 42 | unsigned int mode_num; |
| 43 | struct rt5501_comm_data *cmd_data; |
| 44 | }; |
| 45 | |
| 46 | enum { |
| 47 | RT5501_INIT = 0, |
| 48 | RT5501_MUTE, |
| 49 | RT5501_MAX_FUNC |
| 50 | }; |
| 51 | |
| 52 | enum RT5501_Mode { |
| 53 | RT5501_MODE_OFF = RT5501_MAX_FUNC, |
| 54 | RT5501_MODE_PLAYBACK, |
| 55 | RT5501_MODE_PLAYBACK8OH, |
| 56 | RT5501_MODE_PLAYBACK16OH, |
| 57 | RT5501_MODE_PLAYBACK32OH, |
| 58 | RT5501_MODE_PLAYBACK64OH, |
| 59 | RT5501_MODE_PLAYBACK128OH, |
| 60 | RT5501_MODE_PLAYBACK256OH, |
| 61 | RT5501_MODE_PLAYBACK500OH, |
| 62 | RT5501_MODE_PLAYBACK1KOH, |
| 63 | RT5501_MODE_VOICE, |
| 64 | RT5501_MODE_TTY, |
| 65 | RT5501_MODE_FM, |
| 66 | RT5501_MODE_RING, |
| 67 | RT5501_MODE_MFG, |
| 68 | RT5501_MODE_BEATS_8_64, |
| 69 | RT5501_MODE_BEATS_128_500, |
| 70 | RT5501_MODE_MONO, |
| 71 | RT5501_MODE_MONO_BEATS, |
| 72 | RT5501_MAX_MODE |
| 73 | }; |
| 74 | |
| 75 | enum HEADSET_QUERY_STATUS{ |
| 76 | RT5501_QUERY_OFF = 0, |
| 77 | RT5501_QUERY_HEADSET, |
| 78 | RT5501_QUERY_FINISH, |
| 79 | }; |
| 80 | |
| 81 | |
| 82 | enum RT5501_STATUS{ |
| 83 | RT5501_OFF = 0, |
| 84 | RT5501_PLAYBACK, |
| 85 | RT5501_SUSPEND, |
| 86 | |
| 87 | }; |
| 88 | |
| 89 | enum HEADSET_OM { |
| 90 | HEADSET_8OM = 0, |
| 91 | HEADSET_16OM, |
| 92 | HEADSET_32OM, |
| 93 | HEADSET_64OM, |
| 94 | HEADSET_128OM, |
| 95 | HEADSET_256OM, |
| 96 | HEADSET_500OM, |
| 97 | HEADSET_1KOM, |
| 98 | HEADSET_MONO, |
| 99 | HEADSET_OM_UNDER_DETECT, |
| 100 | }; |
| 101 | |
| 102 | enum AMP_GPIO_STATUS { |
| 103 | AMP_GPIO_OFF = 0, |
| 104 | AMP_GPIO_ON, |
| 105 | AMP_GPIO_QUERRTY_ON, |
| 106 | }; |
| 107 | |
| 108 | enum AMP_S4_STATUS { |
| 109 | AMP_S4_AUTO = 0, |
| 110 | AMP_S4_PWM, |
| 111 | }; |
| 112 | |
| 113 | #define QUERY_IMMED msecs_to_jiffies(0) |
| 114 | #define QUERY_LATTER msecs_to_jiffies(200) |
| 115 | #define RT5501_SENSE_READY 0x80 |
| 116 | |
| 117 | #define RT5501_IOCTL_MAGIC 'g' |
| 118 | #define RT5501_SET_CONFIG _IOW(RT5501_IOCTL_MAGIC, 0x01, unsigned) |
| 119 | #define RT5501_READ_CONFIG _IOW(RT5501_IOCTL_MAGIC, 0x02, unsigned) |
| 120 | #define RT5501_SET_MODE _IOW(RT5501_IOCTL_MAGIC, 0x03, unsigned) |
| 121 | #define RT5501_SET_PARAM _IOW(RT5501_IOCTL_MAGIC, 0x04, unsigned) |
| 122 | #define RT5501_WRITE_REG _IOW(RT5501_IOCTL_MAGIC, 0x07, unsigned) |
| 123 | #define RT5501_QUERY_OM _IOW(RT5501_IOCTL_MAGIC, 0x08, unsigned) |
| 124 | |
| 125 | int query_rt5501(void); |
| 126 | void set_rt5501_amp(int on); |
| 127 | #endif |
| 128 | |