diff options
Diffstat (limited to 'sound/ppc/tumbler.c')
-rw-r--r-- | sound/ppc/tumbler.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c index 789f44f4ac78..20afdf9772ee 100644 --- a/sound/ppc/tumbler.c +++ b/sound/ppc/tumbler.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/kmod.h> | 30 | #include <linux/kmod.h> |
31 | #include <linux/slab.h> | 31 | #include <linux/slab.h> |
32 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
33 | #include <linux/string.h> | ||
33 | #include <sound/core.h> | 34 | #include <sound/core.h> |
34 | #include <asm/io.h> | 35 | #include <asm/io.h> |
35 | #include <asm/irq.h> | 36 | #include <asm/irq.h> |
@@ -46,6 +47,8 @@ | |||
46 | #define DBG(fmt...) | 47 | #define DBG(fmt...) |
47 | #endif | 48 | #endif |
48 | 49 | ||
50 | #define IS_G4DA (of_machine_is_compatible("PowerMac3,4")) | ||
51 | |||
49 | /* i2c address for tumbler */ | 52 | /* i2c address for tumbler */ |
50 | #define TAS_I2C_ADDR 0x34 | 53 | #define TAS_I2C_ADDR 0x34 |
51 | 54 | ||
@@ -243,6 +246,7 @@ static int tumbler_set_master_volume(struct pmac_tumbler *mix) | |||
243 | snd_printk(KERN_ERR "failed to set volume \n"); | 246 | snd_printk(KERN_ERR "failed to set volume \n"); |
244 | return -EINVAL; | 247 | return -EINVAL; |
245 | } | 248 | } |
249 | DBG("(I) succeeded to set volume (%u, %u)\n", left_vol, right_vol); | ||
246 | return 0; | 250 | return 0; |
247 | } | 251 | } |
248 | 252 | ||
@@ -353,6 +357,7 @@ static int tumbler_set_drc(struct pmac_tumbler *mix) | |||
353 | snd_printk(KERN_ERR "failed to set DRC\n"); | 357 | snd_printk(KERN_ERR "failed to set DRC\n"); |
354 | return -EINVAL; | 358 | return -EINVAL; |
355 | } | 359 | } |
360 | DBG("(I) succeeded to set DRC (%u, %u)\n", val[0], val[1]); | ||
356 | return 0; | 361 | return 0; |
357 | } | 362 | } |
358 | 363 | ||
@@ -389,6 +394,7 @@ static int snapper_set_drc(struct pmac_tumbler *mix) | |||
389 | snd_printk(KERN_ERR "failed to set DRC\n"); | 394 | snd_printk(KERN_ERR "failed to set DRC\n"); |
390 | return -EINVAL; | 395 | return -EINVAL; |
391 | } | 396 | } |
397 | DBG("(I) succeeded to set DRC (%u, %u)\n", val[0], val[1]); | ||
392 | return 0; | 398 | return 0; |
393 | } | 399 | } |
394 | 400 | ||
@@ -1134,7 +1140,8 @@ static long tumbler_find_device(const char *device, const char *platform, | |||
1134 | gp->inactive_val = (*base) ? 0x4 : 0x5; | 1140 | gp->inactive_val = (*base) ? 0x4 : 0x5; |
1135 | } else { | 1141 | } else { |
1136 | const u32 *prop = NULL; | 1142 | const u32 *prop = NULL; |
1137 | gp->active_state = 0; | 1143 | gp->active_state = IS_G4DA |
1144 | && !strncmp(device, "keywest-gpio1", 13); | ||
1138 | gp->active_val = 0x4; | 1145 | gp->active_val = 0x4; |
1139 | gp->inactive_val = 0x5; | 1146 | gp->inactive_val = 0x5; |
1140 | /* Here are some crude hacks to extract the GPIO polarity and | 1147 | /* Here are some crude hacks to extract the GPIO polarity and |
@@ -1312,6 +1319,9 @@ static int __devinit tumbler_init(struct snd_pmac *chip) | |||
1312 | if (irq <= NO_IRQ) | 1319 | if (irq <= NO_IRQ) |
1313 | irq = tumbler_find_device("line-output-detect", | 1320 | irq = tumbler_find_device("line-output-detect", |
1314 | NULL, &mix->line_detect, 1); | 1321 | NULL, &mix->line_detect, 1); |
1322 | if (IS_G4DA && irq <= NO_IRQ) | ||
1323 | irq = tumbler_find_device("keywest-gpio16", | ||
1324 | NULL, &mix->line_detect, 1); | ||
1315 | mix->lineout_irq = irq; | 1325 | mix->lineout_irq = irq; |
1316 | 1326 | ||
1317 | tumbler_reset_audio(chip); | 1327 | tumbler_reset_audio(chip); |