1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/*
* Definitions for rt5506 Headphone amp chip.
*/
#ifndef RT5506_H
#define RT5506_H
#include <linux/ioctl.h>
#include <linux/wakelock.h>
#include <linux/regulator/rpm-smd-regulator.h>
#include <linux/regulator/consumer.h>
#define MSM8994_LDO_WR (1) /* Workaround for 8994 AKM current leakage issue, defined same as in msm8994.c */
#define RT5506_I2C_NAME "rt5506"
#define MAX_REG_DATA 15
#define QUERY_IMMED msecs_to_jiffies(0)
#define QUERY_LATTER msecs_to_jiffies(200)
#define AMP_SENSE_READY 0x80
enum {
RT55XX_INIT = 0,
RT55XX_MUTE,
RT55XX_MAX_FUNC
};
enum RT55XX_Mode {
RT55XX_MODE_OFF = RT55XX_MAX_FUNC,
RT55XX_MODE_PLAYBACK,
RT55XX_MODE_PLAYBACK8OH,
RT55XX_MODE_PLAYBACK16OH,
RT55XX_MODE_PLAYBACK32OH,
RT55XX_MODE_PLAYBACK64OH,
RT55XX_MODE_PLAYBACK128OH,
RT55XX_MODE_PLAYBACK256OH,
RT55XX_MODE_PLAYBACK500OH,
RT55XX_MODE_PLAYBACK1KOH,
RT55XX_MODE_VOICE,
RT55XX_MODE_TTY,
RT55XX_MODE_FM,
RT55XX_MODE_RING,
RT55XX_MODE_MFG,
RT55XX_MODE_BEATS_8_64,
RT55XX_MODE_BEATS_128_500,
RT55XX_MODE_MONO,
RT55XX_MODE_MONO_BEATS,
RT55XX_MAX_MODE
};
enum HEADSET_QUERY_STATUS{
RT55XX_QUERY_OFF = 0,
RT55XX_QUERY_HEADSET,
RT55XX_QUERY_FINISH,
};
enum RT55XX_STATUS{
RT55XX_OFF = 0,
RT55XX_PLAYBACK,
RT55XX_SUSPEND,
};
enum HEADSET_OM {
HEADSET_8OM = 0,
HEADSET_16OM,
HEADSET_32OM,
HEADSET_64OM,
HEADSET_128OM,
HEADSET_256OM,
HEADSET_500OM,
HEADSET_1KOM,
HEADSET_MONO,
HEADSET_OM_UNDER_DETECT,
};
enum AMP_GPIO_STATUS {
AMP_GPIO_OFF = 0,
AMP_GPIO_ON,
AMP_GPIO_QUERRTY_ON,
};
enum AMP_S4_STATUS {
AMP_S4_AUTO = 0,
AMP_S4_PWM,
};
struct rt55xx_platform_data {
uint32_t gpio_rt55xx_enable;
const char *power_supply;
struct regulator *power_reg;
};
struct rt55xx_reg_data {
unsigned char addr;
unsigned char val;
};
struct rt55xx_config {
unsigned int reg_len;
struct rt55xx_reg_data reg[MAX_REG_DATA];
};
struct rt55xx_comm_data {
unsigned int out_mode;
struct rt55xx_config config;
};
struct rt55xx_config_data {
unsigned int mode_num;
struct rt55xx_comm_data cmd_data[RT55XX_MAX_MODE]; /* [mode][mode_kind][reserve][cmds..] */
};
#define RT55XX_IOCTL_MAGIC 'g'
//#define RT55XX_SET_CONFIG _IOW(RT55XX_IOCTL_MAGIC, 0x01, unsigned)
//#define RT55XX_READ_CONFIG _IOR(RT55XX_IOCTL_MAGIC, 0x02, unsigned)
#define RT55XX_SET_MODE _IOW(RT55XX_IOCTL_MAGIC, 0x03, int)
#define RT55XX_SET_PARAM _IOW(RT55XX_IOCTL_MAGIC, 0x04, struct rt55xx_config_data)
//#define RT55XX_WRITE_REG _IOW(RT55XX_IOCTL_MAGIC, 0x07, unsigned)
#define RT55XX_QUERY_OM _IOR(RT55XX_IOCTL_MAGIC, 0x08, int)
#if MSM8994_LDO_WR
extern int msm8994_hph_en_ready(void);
#endif
#endif
|