14 #include <linux/module.h>
16 #include <linux/i2c.h>
24 static u8 max9877_regs[5] = { 0x40, 0x00, 0x00, 0x00, 0x49 };
26 static void max9877_write_regs(
void)
33 data[i + 1] = max9877_regs[i];
39 static int max9877_get_reg(
struct snd_kcontrol *kcontrol,
44 unsigned int reg = mc->
reg;
52 ucontrol->
value.integer.value[0] =
58 static int max9877_set_reg(
struct snd_kcontrol *kcontrol,
63 unsigned int reg = mc->
reg;
67 unsigned int val = (ucontrol->
value.integer.value[0] &
mask);
75 max9877_regs[
reg] &= ~(mask <<
shift);
82 static int max9877_get_2reg(
struct snd_kcontrol *kcontrol,
87 unsigned int reg = mc->
reg;
98 static int max9877_set_2reg(
struct snd_kcontrol *kcontrol,
103 unsigned int reg = mc->
reg;
107 unsigned int val = (ucontrol->
value.integer.value[0] &
mask);
108 unsigned int val2 = (ucontrol->
value.integer.value[1] &
mask);
109 unsigned int change = 0;
122 max9877_write_regs();
128 static int max9877_get_out_mode(
struct snd_kcontrol *kcontrol,
140 static int max9877_set_out_mode(
struct snd_kcontrol *kcontrol,
143 u8 value = ucontrol->
value.integer.value[0];
152 max9877_write_regs();
156 static int max9877_get_osc_mode(
struct snd_kcontrol *kcontrol,
167 static int max9877_set_osc_mode(
struct snd_kcontrol *kcontrol,
170 u8 value = ucontrol->
value.integer.value[0];
178 max9877_write_regs();
182 static const unsigned int max9877_pgain_tlv[] = {
188 static const unsigned int max9877_output_tlv[] = {
196 static const char *max9877_out_mode[] = {
205 "INA + INB -> SPK and HP",
208 static const char *max9877_osc_mode[] = {
214 static const struct soc_enum max9877_enum[] = {
222 max9877_get_reg, max9877_set_reg, max9877_pgain_tlv),
225 max9877_get_reg, max9877_set_reg, max9877_pgain_tlv),
228 max9877_get_reg, max9877_set_reg, max9877_output_tlv),
231 max9877_get_2reg, max9877_set_2reg, max9877_output_tlv),
234 max9877_get_reg, max9877_set_reg),
237 max9877_get_reg, max9877_set_reg),
240 max9877_get_reg, max9877_set_reg),
243 max9877_get_reg, max9877_set_reg),
246 max9877_get_reg, max9877_set_reg),
248 max9877_get_out_mode, max9877_set_out_mode),
249 SOC_ENUM_EXT(
"MAX9877 Oscillator Mode", max9877_enum[1],
250 max9877_get_osc_mode, max9877_set_osc_mode),
266 max9877_write_regs();
284 static struct i2c_driver max9877_i2c_driver = {
289 .probe = max9877_i2c_probe,
291 .id_table = max9877_i2c_id,