Lines Matching +full:integer +full:- +full:n

1 // SPDX-License-Identifier: GPL-2.0-or-later
114 err = i2c_smbus_write_byte_data(i2c->client, in send_init_client()
118 DBG("(W) i2c error %d\n", err); in send_init_client()
120 } while (count--); in send_init_client()
122 return -ENXIO; in send_init_client()
136 DBG("(I) tumbler init client\n"); in tumbler_init_client()
145 /* normal operation, all-pass mode */ in snapper_init_client()
147 /* normal output, no deemphasis, A input, power-up, line-in */ in snapper_init_client()
151 DBG("(I) snapper init client\n"); in snapper_init_client()
159 pmac_call_feature(PMAC_FTR_WRITE_GPIO, NULL, (gp)->addr, val)
161 pmac_call_feature(PMAC_FTR_READ_GPIO, NULL, (gp)->addr, 0)
166 if (! gp->addr) in write_audio_gpio()
168 active = active ? gp->active_val : gp->inactive_val; in write_audio_gpio()
170 DBG("(I) gpio %x write %d\n", gp->addr, active); in write_audio_gpio()
177 if (! gp->addr) in check_audio_gpio()
182 return (ret & 0x1) == (gp->active_val & 0x1); in check_audio_gpio()
188 if (! gp->addr) in read_audio_gpio()
192 return ret == gp->active_state; in read_audio_gpio()
203 if (! mix->i2c.client) in tumbler_set_master_volume()
204 return -ENODEV; in tumbler_set_master_volume()
206 if (! mix->master_switch[0]) in tumbler_set_master_volume()
209 left_vol = mix->master_vol[0]; in tumbler_set_master_volume()
211 left_vol = ARRAY_SIZE(master_volume_table) - 1; in tumbler_set_master_volume()
214 if (! mix->master_switch[1]) in tumbler_set_master_volume()
217 right_vol = mix->master_vol[1]; in tumbler_set_master_volume()
219 right_vol = ARRAY_SIZE(master_volume_table) - 1; in tumbler_set_master_volume()
231 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, TAS_REG_VOL, 6, in tumbler_set_master_volume()
233 dev_err(&mix->i2c.client->dev, "failed to set volume\n"); in tumbler_set_master_volume()
234 return -EINVAL; in tumbler_set_master_volume()
236 DBG("(I) succeeded to set volume (%u, %u)\n", left_vol, right_vol); in tumbler_set_master_volume()
245 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in tumbler_info_master_volume()
246 uinfo->count = 2; in tumbler_info_master_volume()
247 uinfo->value.integer.min = 0; in tumbler_info_master_volume()
248 uinfo->value.integer.max = ARRAY_SIZE(master_volume_table) - 1; in tumbler_info_master_volume()
256 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_get_master_volume()
258 ucontrol->value.integer.value[0] = mix->master_vol[0]; in tumbler_get_master_volume()
259 ucontrol->value.integer.value[1] = mix->master_vol[1]; in tumbler_get_master_volume()
267 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_put_master_volume()
271 vol[0] = ucontrol->value.integer.value[0]; in tumbler_put_master_volume()
272 vol[1] = ucontrol->value.integer.value[1]; in tumbler_put_master_volume()
275 return -EINVAL; in tumbler_put_master_volume()
276 change = mix->master_vol[0] != vol[0] || in tumbler_put_master_volume()
277 mix->master_vol[1] != vol[1]; in tumbler_put_master_volume()
279 mix->master_vol[0] = vol[0]; in tumbler_put_master_volume()
280 mix->master_vol[1] = vol[1]; in tumbler_put_master_volume()
291 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_get_master_switch()
293 ucontrol->value.integer.value[0] = mix->master_switch[0]; in tumbler_get_master_switch()
294 ucontrol->value.integer.value[1] = mix->master_switch[1]; in tumbler_get_master_switch()
302 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_put_master_switch()
305 change = mix->master_switch[0] != ucontrol->value.integer.value[0] || in tumbler_put_master_switch()
306 mix->master_switch[1] != ucontrol->value.integer.value[1]; in tumbler_put_master_switch()
308 mix->master_switch[0] = !!ucontrol->value.integer.value[0]; in tumbler_put_master_switch()
309 mix->master_switch[1] = !!ucontrol->value.integer.value[1]; in tumbler_put_master_switch()
326 if (! mix->i2c.client) in tumbler_set_drc()
327 return -ENODEV; in tumbler_set_drc()
329 if (mix->drc_enable) { in tumbler_set_drc()
331 if (mix->drc_range > TAS3001_DRC_MAX) in tumbler_set_drc()
333 else if (mix->drc_range < 0) in tumbler_set_drc()
336 val[1] = mix->drc_range + 0x91; in tumbler_set_drc()
342 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, TAS_REG_DRC, in tumbler_set_drc()
344 dev_err(&mix->i2c.client->dev, "failed to set DRC\n"); in tumbler_set_drc()
345 return -EINVAL; in tumbler_set_drc()
347 DBG("(I) succeeded to set DRC (%u, %u)\n", val[0], val[1]); in tumbler_set_drc()
361 if (! mix->i2c.client) in snapper_set_drc()
362 return -ENODEV; in snapper_set_drc()
364 if (mix->drc_enable) in snapper_set_drc()
369 if (mix->drc_range > 0xef) in snapper_set_drc()
371 else if (mix->drc_range < 0) in snapper_set_drc()
374 val[2] = mix->drc_range; in snapper_set_drc()
379 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, TAS_REG_DRC, in snapper_set_drc()
381 dev_err(&mix->i2c.client->dev, "failed to set DRC\n"); in snapper_set_drc()
382 return -EINVAL; in snapper_set_drc()
384 DBG("(I) succeeded to set DRC (%u, %u)\n", val[0], val[1]); in snapper_set_drc()
392 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in tumbler_info_drc_value()
393 uinfo->count = 1; in tumbler_info_drc_value()
394 uinfo->value.integer.min = 0; in tumbler_info_drc_value()
395 uinfo->value.integer.max = in tumbler_info_drc_value()
396 chip->model == PMAC_TUMBLER ? TAS3001_DRC_MAX : TAS3004_DRC_MAX; in tumbler_info_drc_value()
405 mix = chip->mixer_data; in tumbler_get_drc_value()
407 return -ENODEV; in tumbler_get_drc_value()
408 ucontrol->value.integer.value[0] = mix->drc_range; in tumbler_get_drc_value()
420 mix = chip->mixer_data; in tumbler_put_drc_value()
422 return -ENODEV; in tumbler_put_drc_value()
423 val = ucontrol->value.integer.value[0]; in tumbler_put_drc_value()
424 if (chip->model == PMAC_TUMBLER) { in tumbler_put_drc_value()
426 return -EINVAL; in tumbler_put_drc_value()
429 return -EINVAL; in tumbler_put_drc_value()
431 change = mix->drc_range != val; in tumbler_put_drc_value()
433 mix->drc_range = val; in tumbler_put_drc_value()
434 if (chip->model == PMAC_TUMBLER) in tumbler_put_drc_value()
447 mix = chip->mixer_data; in tumbler_get_drc_switch()
449 return -ENODEV; in tumbler_get_drc_switch()
450 ucontrol->value.integer.value[0] = mix->drc_enable; in tumbler_get_drc_switch()
461 mix = chip->mixer_data; in tumbler_put_drc_switch()
463 return -ENODEV; in tumbler_put_drc_switch()
464 change = mix->drc_enable != ucontrol->value.integer.value[0]; in tumbler_put_drc_switch()
466 mix->drc_enable = !!ucontrol->value.integer.value[0]; in tumbler_put_drc_switch()
467 if (chip->model == PMAC_TUMBLER) in tumbler_put_drc_switch()
495 if (! mix->i2c.client) in tumbler_set_mono_volume()
496 return -ENODEV; in tumbler_set_mono_volume()
498 vol = mix->mono_vol[info->index]; in tumbler_set_mono_volume()
499 if (vol >= info->max) in tumbler_set_mono_volume()
500 vol = info->max - 1; in tumbler_set_mono_volume()
501 vol = info->table[vol]; in tumbler_set_mono_volume()
502 for (i = 0; i < info->bytes; i++) in tumbler_set_mono_volume()
503 block[i] = (vol >> ((info->bytes - i - 1) * 8)) & 0xff; in tumbler_set_mono_volume()
504 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, info->reg, in tumbler_set_mono_volume()
505 info->bytes, block) < 0) { in tumbler_set_mono_volume()
506 dev_err(&mix->i2c.client->dev, "failed to set mono volume %d\n", in tumbler_set_mono_volume()
507 info->index); in tumbler_set_mono_volume()
508 return -EINVAL; in tumbler_set_mono_volume()
516 struct tumbler_mono_vol *info = (struct tumbler_mono_vol *)kcontrol->private_value; in tumbler_info_mono()
518 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in tumbler_info_mono()
519 uinfo->count = 1; in tumbler_info_mono()
520 uinfo->value.integer.min = 0; in tumbler_info_mono()
521 uinfo->value.integer.max = info->max - 1; in tumbler_info_mono()
528 struct tumbler_mono_vol *info = (struct tumbler_mono_vol *)kcontrol->private_value; in tumbler_get_mono()
531 mix = chip->mixer_data; in tumbler_get_mono()
533 return -ENODEV; in tumbler_get_mono()
534 ucontrol->value.integer.value[0] = mix->mono_vol[info->index]; in tumbler_get_mono()
541 struct tumbler_mono_vol *info = (struct tumbler_mono_vol *)kcontrol->private_value; in tumbler_put_mono()
547 mix = chip->mixer_data; in tumbler_put_mono()
549 return -ENODEV; in tumbler_put_mono()
550 vol = ucontrol->value.integer.value[0]; in tumbler_put_mono()
551 if (vol >= info->max) in tumbler_put_mono()
552 return -EINVAL; in tumbler_put_mono()
553 change = mix->mono_vol[info->index] != vol; in tumbler_put_mono()
555 mix->mono_vol[info->index] = vol; in tumbler_put_mono()
632 vol = mix->mix_vol[idx][ch]; in snapper_set_mix_vol1()
634 vol = ARRAY_SIZE(mixer_volume_table) - 1; in snapper_set_mix_vol1()
635 mix->mix_vol[idx][ch] = vol; in snapper_set_mix_vol1()
639 vol = mix->mix_vol[i][ch]; in snapper_set_mix_vol1()
642 block[i * 3 + j] = (vol >> ((2 - j) * 8)) & 0xff; in snapper_set_mix_vol1()
644 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, reg, in snapper_set_mix_vol1()
646 dev_err(&mix->i2c.client->dev, in snapper_set_mix_vol1()
647 "failed to set mono volume %d\n", reg); in snapper_set_mix_vol1()
648 return -EINVAL; in snapper_set_mix_vol1()
655 if (! mix->i2c.client) in snapper_set_mix_vol()
656 return -ENODEV; in snapper_set_mix_vol()
659 return -EINVAL; in snapper_set_mix_vol()
666 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snapper_info_mix()
667 uinfo->count = 2; in snapper_info_mix()
668 uinfo->value.integer.min = 0; in snapper_info_mix()
669 uinfo->value.integer.max = ARRAY_SIZE(mixer_volume_table) - 1; in snapper_info_mix()
676 int idx = (int)kcontrol->private_value; in snapper_get_mix()
679 mix = chip->mixer_data; in snapper_get_mix()
681 return -ENODEV; in snapper_get_mix()
682 ucontrol->value.integer.value[0] = mix->mix_vol[idx][0]; in snapper_get_mix()
683 ucontrol->value.integer.value[1] = mix->mix_vol[idx][1]; in snapper_get_mix()
690 int idx = (int)kcontrol->private_value; in snapper_put_mix()
696 mix = chip->mixer_data; in snapper_put_mix()
698 return -ENODEV; in snapper_put_mix()
699 vol[0] = ucontrol->value.integer.value[0]; in snapper_put_mix()
700 vol[1] = ucontrol->value.integer.value[1]; in snapper_put_mix()
703 return -EINVAL; in snapper_put_mix()
704 change = mix->mix_vol[idx][0] != vol[0] || in snapper_put_mix()
705 mix->mix_vol[idx][1] != vol[1]; in snapper_put_mix()
707 mix->mix_vol[idx][0] = vol[0]; in snapper_put_mix()
708 mix->mix_vol[idx][1] = vol[1]; in snapper_put_mix()
728 mix = chip->mixer_data; in tumbler_get_mute_switch()
730 return -ENODEV; in tumbler_get_mute_switch()
731 switch(kcontrol->private_value) { in tumbler_get_mute_switch()
733 gp = &mix->hp_mute; break; in tumbler_get_mute_switch()
735 gp = &mix->amp_mute; break; in tumbler_get_mute_switch()
737 gp = &mix->line_mute; break; in tumbler_get_mute_switch()
742 return -EINVAL; in tumbler_get_mute_switch()
743 ucontrol->value.integer.value[0] = !check_audio_gpio(gp); in tumbler_get_mute_switch()
755 if (chip->update_automute && chip->auto_mute) in tumbler_put_mute_switch()
756 return 0; /* don't touch in the auto-mute mode */ in tumbler_put_mute_switch()
758 mix = chip->mixer_data; in tumbler_put_mute_switch()
760 return -ENODEV; in tumbler_put_mute_switch()
761 switch(kcontrol->private_value) { in tumbler_put_mute_switch()
763 gp = &mix->hp_mute; break; in tumbler_put_mute_switch()
765 gp = &mix->amp_mute; break; in tumbler_put_mute_switch()
767 gp = &mix->line_mute; break; in tumbler_put_mute_switch()
772 return -EINVAL; in tumbler_put_mute_switch()
774 if (val != ucontrol->value.integer.value[0]) { in tumbler_put_mute_switch()
775 write_audio_gpio(gp, ! ucontrol->value.integer.value[0]); in tumbler_put_mute_switch()
783 if (! mix->i2c.client) in snapper_set_capture_source()
784 return -ENODEV; in snapper_set_capture_source()
785 if (mix->capture_source) in snapper_set_capture_source()
786 mix->acs |= 2; in snapper_set_capture_source()
788 mix->acs &= ~2; in snapper_set_capture_source()
789 return i2c_smbus_write_byte_data(mix->i2c.client, TAS_REG_ACS, mix->acs); in snapper_set_capture_source()
806 struct pmac_tumbler *mix = chip->mixer_data; in snapper_get_capture_source()
808 ucontrol->value.enumerated.item[0] = mix->capture_source; in snapper_get_capture_source()
816 struct pmac_tumbler *mix = chip->mixer_data; in snapper_put_capture_source()
819 change = ucontrol->value.enumerated.item[0] != mix->capture_source; in snapper_put_capture_source()
821 mix->capture_source = !!ucontrol->value.enumerated.item[0]; in snapper_put_capture_source()
853 DEFINE_MONO("Tone Control - Bass", bass),
854 DEFINE_MONO("Tone Control - Treble", treble),
881 DEFINE_SNAPPER_MONO("Tone Control - Bass", bass),
882 DEFINE_SNAPPER_MONO("Tone Control - Treble", treble),
932 * auto-mute stuffs
936 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_detect_headphone()
939 if (mix->hp_detect.addr) in tumbler_detect_headphone()
940 detect |= read_audio_gpio(&mix->hp_detect); in tumbler_detect_headphone()
946 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_detect_lineout()
949 if (mix->line_detect.addr) in tumbler_detect_lineout()
950 detect |= read_audio_gpio(&mix->line_detect); in tumbler_detect_lineout()
960 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in check_mute()
961 &sw->id); in check_mute()
977 mix = chip->mixer_data; in device_change_handler()
984 DBG("headphone: %d, lineout: %d\n", headphone, lineout); in device_change_handler()
989 check_mute(chip, &mix->hp_mute, 0, mix->auto_mute_notify, in device_change_handler()
990 chip->master_sw_ctl); in device_change_handler()
991 if (lineout && mix->line_mute.addr != 0) in device_change_handler()
992 check_mute(chip, &mix->line_mute, 0, mix->auto_mute_notify, in device_change_handler()
993 chip->lineout_sw_ctl); in device_change_handler()
994 if (mix->anded_reset) in device_change_handler()
996 check_mute(chip, &mix->amp_mute, !IS_G4DA, mix->auto_mute_notify, in device_change_handler()
997 chip->speaker_sw_ctl); in device_change_handler()
1000 check_mute(chip, &mix->amp_mute, 0, mix->auto_mute_notify, in device_change_handler()
1001 chip->speaker_sw_ctl); in device_change_handler()
1002 if (mix->anded_reset) in device_change_handler()
1004 check_mute(chip, &mix->hp_mute, 1, mix->auto_mute_notify, in device_change_handler()
1005 chip->master_sw_ctl); in device_change_handler()
1006 if (mix->line_mute.addr != 0) in device_change_handler()
1007 check_mute(chip, &mix->line_mute, 1, mix->auto_mute_notify, in device_change_handler()
1008 chip->lineout_sw_ctl); in device_change_handler()
1010 if (mix->auto_mute_notify) in device_change_handler()
1011 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in device_change_handler()
1012 &chip->hp_detect_ctl->id); in device_change_handler()
1015 mix->drc_enable = ! (headphone || lineout); in device_change_handler()
1016 if (mix->auto_mute_notify) in device_change_handler()
1017 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in device_change_handler()
1018 &chip->drc_sw_ctl->id); in device_change_handler()
1019 if (chip->model == PMAC_TUMBLER) in device_change_handler()
1031 if (chip->auto_mute) { in tumbler_update_automute()
1033 mix = chip->mixer_data; in tumbler_update_automute()
1036 mix->auto_mute_notify = do_notify; in tumbler_update_automute()
1043 /* interrupt - headphone plug changed */
1047 if (chip->update_automute && chip->initialized) { in headphone_intr()
1048 chip->update_automute(chip, 1); in headphone_intr()
1054 /* look for audio-gpio device */
1065 const char *property = of_get_property(np, "audio-gpio", NULL); in find_audio_device()
1073 /* look for audio-gpio device */
1105 DBG("(W) cannot find audio device %s !\n", device); in tumbler_find_device()
1106 return -ENODEV; in tumbler_find_device()
1113 DBG("(E) cannot find address for device %s !\n", device); in tumbler_find_device()
1115 return -ENODEV; in tumbler_find_device()
1123 gp->addr = addr & 0x0000ffff; in tumbler_find_device()
1125 base = of_get_property(node, "audio-gpio-active-state", NULL); in tumbler_find_device()
1127 gp->active_state = *base; in tumbler_find_device()
1128 gp->active_val = (*base) ? 0x5 : 0x4; in tumbler_find_device()
1129 gp->inactive_val = (*base) ? 0x4 : 0x5; in tumbler_find_device()
1132 gp->active_state = IS_G4DA in tumbler_find_device()
1133 && !strncmp(device, "keywest-gpio1", 13); in tumbler_find_device()
1134 gp->active_val = 0x4; in tumbler_find_device()
1135 gp->inactive_val = 0x5; in tumbler_find_device()
1137 * open collector informations out of the do-platform script in tumbler_find_device()
1144 gp->active_val = 0xd; in tumbler_find_device()
1145 gp->inactive_val = 0xc; in tumbler_find_device()
1148 gp->active_val = 0x5; in tumbler_find_device()
1149 gp->inactive_val = 0x4; in tumbler_find_device()
1154 DBG("(I) GPIO device %s found, offset: %x, active state: %d !\n", in tumbler_find_device()
1155 device, gp->addr, gp->active_state); in tumbler_find_device()
1165 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_reset_audio()
1167 if (mix->anded_reset) { in tumbler_reset_audio()
1168 DBG("(I) codec anded reset !\n"); in tumbler_reset_audio()
1169 write_audio_gpio(&mix->hp_mute, 0); in tumbler_reset_audio()
1170 write_audio_gpio(&mix->amp_mute, 0); in tumbler_reset_audio()
1172 write_audio_gpio(&mix->hp_mute, 1); in tumbler_reset_audio()
1173 write_audio_gpio(&mix->amp_mute, 1); in tumbler_reset_audio()
1175 write_audio_gpio(&mix->hp_mute, 0); in tumbler_reset_audio()
1176 write_audio_gpio(&mix->amp_mute, 0); in tumbler_reset_audio()
1179 DBG("(I) codec normal reset !\n"); in tumbler_reset_audio()
1181 write_audio_gpio(&mix->audio_reset, 0); in tumbler_reset_audio()
1183 write_audio_gpio(&mix->audio_reset, 1); in tumbler_reset_audio()
1185 write_audio_gpio(&mix->audio_reset, 0); in tumbler_reset_audio()
1194 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_suspend()
1196 if (mix->headphone_irq >= 0) in tumbler_suspend()
1197 disable_irq(mix->headphone_irq); in tumbler_suspend()
1198 if (mix->lineout_irq >= 0) in tumbler_suspend()
1199 disable_irq(mix->lineout_irq); in tumbler_suspend()
1200 mix->save_master_switch[0] = mix->master_switch[0]; in tumbler_suspend()
1201 mix->save_master_switch[1] = mix->master_switch[1]; in tumbler_suspend()
1202 mix->save_master_vol[0] = mix->master_vol[0]; in tumbler_suspend()
1203 mix->save_master_vol[1] = mix->master_vol[1]; in tumbler_suspend()
1204 mix->master_switch[0] = mix->master_switch[1] = 0; in tumbler_suspend()
1206 if (!mix->anded_reset) { in tumbler_suspend()
1207 write_audio_gpio(&mix->amp_mute, 1); in tumbler_suspend()
1208 write_audio_gpio(&mix->hp_mute, 1); in tumbler_suspend()
1210 if (chip->model == PMAC_SNAPPER) { in tumbler_suspend()
1211 mix->acs |= 1; in tumbler_suspend()
1212 i2c_smbus_write_byte_data(mix->i2c.client, TAS_REG_ACS, mix->acs); in tumbler_suspend()
1214 if (mix->anded_reset) { in tumbler_suspend()
1215 write_audio_gpio(&mix->amp_mute, 1); in tumbler_suspend()
1216 write_audio_gpio(&mix->hp_mute, 1); in tumbler_suspend()
1218 write_audio_gpio(&mix->audio_reset, 1); in tumbler_suspend()
1224 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_resume()
1226 mix->acs &= ~1; in tumbler_resume()
1227 mix->master_switch[0] = mix->save_master_switch[0]; in tumbler_resume()
1228 mix->master_switch[1] = mix->save_master_switch[1]; in tumbler_resume()
1229 mix->master_vol[0] = mix->save_master_vol[0]; in tumbler_resume()
1230 mix->master_vol[1] = mix->save_master_vol[1]; in tumbler_resume()
1232 if (mix->i2c.client && mix->i2c.init_client) { in tumbler_resume()
1233 if (mix->i2c.init_client(&mix->i2c) < 0) in tumbler_resume()
1234 dev_err(chip->card->dev, "tumbler_init_client error\n"); in tumbler_resume()
1236 dev_err(chip->card->dev, "tumbler: i2c is not initialized\n"); in tumbler_resume()
1237 if (chip->model == PMAC_TUMBLER) { in tumbler_resume()
1252 if (chip->update_automute) in tumbler_resume()
1253 chip->update_automute(chip, 0); in tumbler_resume()
1254 if (mix->headphone_irq >= 0) { in tumbler_resume()
1257 enable_irq(mix->headphone_irq); in tumbler_resume()
1259 val = do_gpio_read(&mix->hp_detect); in tumbler_resume()
1260 do_gpio_write(&mix->hp_detect, val | 0x80); in tumbler_resume()
1262 if (mix->lineout_irq >= 0) in tumbler_resume()
1263 enable_irq(mix->lineout_irq); in tumbler_resume()
1271 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_init()
1273 if (tumbler_find_device("audio-hw-reset", in tumbler_init()
1274 "platform-do-hw-reset", in tumbler_init()
1275 &mix->audio_reset, 0) < 0) in tumbler_init()
1276 tumbler_find_device("hw-reset", in tumbler_init()
1277 "platform-do-hw-reset", in tumbler_init()
1278 &mix->audio_reset, 1); in tumbler_init()
1279 if (tumbler_find_device("amp-mute", in tumbler_init()
1280 "platform-do-amp-mute", in tumbler_init()
1281 &mix->amp_mute, 0) < 0) in tumbler_init()
1282 tumbler_find_device("amp-mute", in tumbler_init()
1283 "platform-do-amp-mute", in tumbler_init()
1284 &mix->amp_mute, 1); in tumbler_init()
1285 if (tumbler_find_device("headphone-mute", in tumbler_init()
1286 "platform-do-headphone-mute", in tumbler_init()
1287 &mix->hp_mute, 0) < 0) in tumbler_init()
1288 tumbler_find_device("headphone-mute", in tumbler_init()
1289 "platform-do-headphone-mute", in tumbler_init()
1290 &mix->hp_mute, 1); in tumbler_init()
1291 if (tumbler_find_device("line-output-mute", in tumbler_init()
1292 "platform-do-lineout-mute", in tumbler_init()
1293 &mix->line_mute, 0) < 0) in tumbler_init()
1294 tumbler_find_device("line-output-mute", in tumbler_init()
1295 "platform-do-lineout-mute", in tumbler_init()
1296 &mix->line_mute, 1); in tumbler_init()
1297 irq = tumbler_find_device("headphone-detect", in tumbler_init()
1298 NULL, &mix->hp_detect, 0); in tumbler_init()
1300 irq = tumbler_find_device("headphone-detect", in tumbler_init()
1301 NULL, &mix->hp_detect, 1); in tumbler_init()
1303 irq = tumbler_find_device("keywest-gpio15", in tumbler_init()
1304 NULL, &mix->hp_detect, 1); in tumbler_init()
1305 mix->headphone_irq = irq; in tumbler_init()
1306 irq = tumbler_find_device("line-output-detect", in tumbler_init()
1307 NULL, &mix->line_detect, 0); in tumbler_init()
1309 irq = tumbler_find_device("line-output-detect", in tumbler_init()
1310 NULL, &mix->line_detect, 1); in tumbler_init()
1312 irq = tumbler_find_device("keywest-gpio16", in tumbler_init()
1313 NULL, &mix->line_detect, 1); in tumbler_init()
1314 mix->lineout_irq = irq; in tumbler_init()
1323 struct pmac_tumbler *mix = chip->mixer_data; in tumbler_cleanup()
1327 if (mix->headphone_irq >= 0) in tumbler_cleanup()
1328 free_irq(mix->headphone_irq, chip); in tumbler_cleanup()
1329 if (mix->lineout_irq >= 0) in tumbler_cleanup()
1330 free_irq(mix->lineout_irq, chip); in tumbler_cleanup()
1331 tumbler_gpio_free(&mix->audio_reset); in tumbler_cleanup()
1332 tumbler_gpio_free(&mix->amp_mute); in tumbler_cleanup()
1333 tumbler_gpio_free(&mix->hp_mute); in tumbler_cleanup()
1334 tumbler_gpio_free(&mix->hp_detect); in tumbler_cleanup()
1335 snd_pmac_keywest_cleanup(&mix->i2c); in tumbler_cleanup()
1337 chip->mixer_data = NULL; in tumbler_cleanup()
1349 request_module("i2c-powermac"); in snd_pmac_tumbler_init()
1353 return -ENOMEM; in snd_pmac_tumbler_init()
1354 mix->headphone_irq = -1; in snd_pmac_tumbler_init()
1356 chip->mixer_data = mix; in snd_pmac_tumbler_init()
1357 chip->mixer_free = tumbler_cleanup; in snd_pmac_tumbler_init()
1358 mix->anded_reset = 0; in snd_pmac_tumbler_init()
1359 mix->reset_on_sleep = 1; in snd_pmac_tumbler_init()
1361 for_each_child_of_node(chip->node, np) { in snd_pmac_tumbler_init()
1363 if (of_property_read_bool(np, "has-anded-reset")) in snd_pmac_tumbler_init()
1364 mix->anded_reset = 1; in snd_pmac_tumbler_init()
1365 if (of_property_present(np, "layout-id")) in snd_pmac_tumbler_init()
1366 mix->reset_on_sleep = 0; in snd_pmac_tumbler_init()
1380 return -ENODEV; in snd_pmac_tumbler_init()
1382 paddr = of_get_property(tas_node, "i2c-address", NULL); in snd_pmac_tumbler_init()
1386 mix->i2c.addr = (*paddr) >> 1; in snd_pmac_tumbler_init()
1388 mix->i2c.addr = TAS_I2C_ADDR; in snd_pmac_tumbler_init()
1391 DBG("(I) TAS i2c address is: %x\n", mix->i2c.addr); in snd_pmac_tumbler_init()
1393 if (chip->model == PMAC_TUMBLER) { in snd_pmac_tumbler_init()
1394 mix->i2c.init_client = tumbler_init_client; in snd_pmac_tumbler_init()
1395 mix->i2c.name = "TAS3001c"; in snd_pmac_tumbler_init()
1398 mix->i2c.init_client = snapper_init_client; in snd_pmac_tumbler_init()
1399 mix->i2c.name = "TAS3004"; in snd_pmac_tumbler_init()
1403 err = snd_pmac_keywest_init(&mix->i2c); in snd_pmac_tumbler_init()
1410 sprintf(chip->card->mixername, "PowerMac %s", chipname); in snd_pmac_tumbler_init()
1412 if (chip->model == PMAC_TUMBLER) { in snd_pmac_tumbler_init()
1414 err = snd_ctl_add(chip->card, snd_ctl_new1(&tumbler_mixers[i], chip)); in snd_pmac_tumbler_init()
1420 err = snd_ctl_add(chip->card, snd_ctl_new1(&snapper_mixers[i], chip)); in snd_pmac_tumbler_init()
1425 chip->master_sw_ctl = snd_ctl_new1(&tumbler_hp_sw, chip); in snd_pmac_tumbler_init()
1426 err = snd_ctl_add(chip->card, chip->master_sw_ctl); in snd_pmac_tumbler_init()
1429 chip->speaker_sw_ctl = snd_ctl_new1(&tumbler_speaker_sw, chip); in snd_pmac_tumbler_init()
1430 err = snd_ctl_add(chip->card, chip->speaker_sw_ctl); in snd_pmac_tumbler_init()
1433 if (mix->line_mute.addr != 0) { in snd_pmac_tumbler_init()
1434 chip->lineout_sw_ctl = snd_ctl_new1(&tumbler_lineout_sw, chip); in snd_pmac_tumbler_init()
1435 err = snd_ctl_add(chip->card, chip->lineout_sw_ctl); in snd_pmac_tumbler_init()
1439 chip->drc_sw_ctl = snd_ctl_new1(&tumbler_drc_sw, chip); in snd_pmac_tumbler_init()
1440 err = snd_ctl_add(chip->card, chip->drc_sw_ctl); in snd_pmac_tumbler_init()
1445 if (chip->model == PMAC_TUMBLER) in snd_pmac_tumbler_init()
1446 mix->drc_range = (TAS3001_DRC_MAX * 6) / 10; in snd_pmac_tumbler_init()
1448 mix->drc_range = (TAS3004_DRC_MAX * 6) / 10; in snd_pmac_tumbler_init()
1449 mix->drc_enable = 1; /* will be changed later if AUTO_DRC is set */ in snd_pmac_tumbler_init()
1450 if (chip->model == PMAC_TUMBLER) in snd_pmac_tumbler_init()
1456 chip->suspend = tumbler_suspend; in snd_pmac_tumbler_init()
1457 chip->resume = tumbler_resume; in snd_pmac_tumbler_init()
1464 if (mix->headphone_irq >= 0 || mix->lineout_irq >= 0) { in snd_pmac_tumbler_init()
1469 chip->detect_headphone = tumbler_detect_headphone; in snd_pmac_tumbler_init()
1470 chip->update_automute = tumbler_update_automute; in snd_pmac_tumbler_init()
1474 if (mix->headphone_irq >= 0) { in snd_pmac_tumbler_init()
1476 err = request_irq(mix->headphone_irq, headphone_intr, 0, in snd_pmac_tumbler_init()
1481 val = do_gpio_read(&mix->hp_detect); in snd_pmac_tumbler_init()
1482 do_gpio_write(&mix->hp_detect, val | 0x80); in snd_pmac_tumbler_init()
1484 if (mix->lineout_irq >= 0) { in snd_pmac_tumbler_init()
1486 err = request_irq(mix->lineout_irq, headphone_intr, 0, in snd_pmac_tumbler_init()
1491 val = do_gpio_read(&mix->line_detect); in snd_pmac_tumbler_init()
1492 do_gpio_write(&mix->line_detect, val | 0x80); in snd_pmac_tumbler_init()