Changeset 358 for GPL/branches/uniaud32-2.0/alsa-kernel/pci/maestro3.c
- Timestamp:
- Jul 16, 2008, 11:53:49 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/branches/uniaud32-2.0/alsa-kernel/pci/maestro3.c
r325 r358 2073 2073 struct snd_ac97_bus *pbus; 2074 2074 struct snd_ac97_template ac97; 2075 struct snd_ctl_elem_id id;2075 struct snd_ctl_elem_id elem_id; 2076 2076 int err; 2077 2077 static struct snd_ac97_bus_ops ops = { … … 2093 2093 snd_ac97_write(chip->ac97, AC97_PCM, 0); 2094 2094 2095 memset(& id, 0, sizeof(id));2096 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;2097 strcpy( id.name, "Master Playback Switch");2098 chip->master_switch = snd_ctl_find_id(chip->card, & id);2099 memset(& id, 0, sizeof(id));2100 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;2101 strcpy( id.name, "Master Playback Volume");2102 chip->master_volume = snd_ctl_find_id(chip->card, & id);2095 memset(&elem_id, 0, sizeof(elem_id)); 2096 elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; 2097 strcpy(elem_id.name, "Master Playback Switch"); 2098 chip->master_switch = snd_ctl_find_id(chip->card, &elem_id); 2099 memset(&elem_id, 0, sizeof(elem_id)); 2100 elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; 2101 strcpy(elem_id.name, "Master Playback Volume"); 2102 chip->master_volume = snd_ctl_find_id(chip->card, &elem_id); 2103 2103 2104 2104 return 0; … … 2432 2432 } 2433 2433 2434 static void 2435 snd_m3_hv_init(struct snd_m3 *chip) 2436 { 2437 unsigned long io = chip->iobase; 2438 u16 val = GPI_VOL_DOWN | GPI_VOL_UP; 2439 2440 if (!chip->is_omnibook) 2441 return; 2442 2443 /* 2444 * Volume buttons on some HP OmniBook laptops 2445 * require some GPIO magic to work correctly. 2446 */ 2447 outw(0xffff, io + GPIO_MASK); 2448 outw(0x0000, io + GPIO_DATA); 2449 2450 outw(~val, io + GPIO_MASK); 2451 outw(inw(io + GPIO_DIRECTION) & ~val, io + GPIO_DIRECTION); 2452 outw(val, io + GPIO_MASK); 2453 2454 outw(0xffff, io + GPIO_MASK); 2455 } 2456 2434 2457 static int 2435 2458 snd_m3_chip_init(struct snd_m3 *chip) … … 2447 2470 pci_write_config_word(pcidev, PCI_LEGACY_AUDIO_CTRL, w); 2448 2471 2449 if (chip->is_omnibook) {2450 /*2451 * Volume buttons on some HP OmniBook laptops don't work2452 * correctly. This makes them work for the most part.2453 *2454 * Volume up and down buttons on the laptop side work.2455 * Fn+cursor_up (volme up) works.2456 * Fn+cursor_down (volume down) doesn't work.2457 * Fn+F7 (mute) works acts as volume up.2458 */2459 outw(~(GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_MASK);2460 outw(inw(io + GPIO_DIRECTION) & ~(GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_DIRECTION);2461 outw((GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_DATA);2462 outw(0xffff, io + GPIO_MASK);2463 }2464 2472 pci_read_config_dword(pcidev, PCI_ALLEGRO_CONFIG, &n); 2465 2473 n &= ~(HV_CTRL_ENABLE | REDUCED_DEBOUNCE | HV_BUTTON_FROM_GD); … … 2547 2555 #endif 2548 2556 2549 if (chip->irq >= 0) { 2550 synchronize_irq(chip->irq); 2557 if (chip->irq >= 0) 2551 2558 free_irq(chip->irq, chip); 2552 }2553 2559 2554 2560 if (chip->iobase) … … 2574 2580 struct snd_card *card = pci_get_drvdata(pci); 2575 2581 struct snd_m3 *chip = card->private_data; 2576 int i, index;2582 int i, dsp_index; 2577 2583 2578 2584 if (chip->suspend_mem == NULL) … … 2588 2594 2589 2595 /* save dsp image */ 2590 index = 0;2596 dsp_index = 0; 2591 2597 for (i = REV_B_CODE_MEMORY_BEGIN; i <= REV_B_CODE_MEMORY_END; i++) 2592 chip->suspend_mem[ index++] =2598 chip->suspend_mem[dsp_index++] = 2593 2599 snd_m3_assp_read(chip, MEMTYPE_INTERNAL_CODE, i); 2594 2600 for (i = REV_B_DATA_MEMORY_BEGIN ; i <= REV_B_DATA_MEMORY_END; i++) 2595 chip->suspend_mem[ index++] =2601 chip->suspend_mem[dsp_index++] = 2596 2602 snd_m3_assp_read(chip, MEMTYPE_INTERNAL_DATA, i); 2597 2603 … … 2606 2612 struct snd_card *card = pci_get_drvdata(pci); 2607 2613 struct snd_m3 *chip = card->private_data; 2608 int i, index;2614 int i, dsp_index; 2609 2615 2610 2616 if (chip->suspend_mem == NULL) … … 2630 2636 2631 2637 /* restore dsp image */ 2632 index = 0;2638 dsp_index = 0; 2633 2639 for (i = REV_B_CODE_MEMORY_BEGIN; i <= REV_B_CODE_MEMORY_END; i++) 2634 2640 snd_m3_assp_write(chip, MEMTYPE_INTERNAL_CODE, i, 2635 chip->suspend_mem[ index++]);2641 chip->suspend_mem[dsp_index++]); 2636 2642 for (i = REV_B_DATA_MEMORY_BEGIN ; i <= REV_B_DATA_MEMORY_END; i++) 2637 2643 snd_m3_assp_write(chip, MEMTYPE_INTERNAL_DATA, i, 2638 chip->suspend_mem[ index++]);2644 chip->suspend_mem[dsp_index++]); 2639 2645 2640 2646 /* tell the dma engine to restart itself */ … … 2648 2654 snd_m3_enable_ints(chip); 2649 2655 snd_m3_amp_enable(chip, 1); 2656 2657 snd_m3_hv_init(chip); 2650 2658 2651 2659 snd_power_change_state(card, SNDRV_CTL_POWER_D0); … … 2792 2800 snd_m3_amp_enable(chip, 1); 2793 2801 2802 snd_m3_hv_init(chip); 2803 2794 2804 tasklet_init(&chip->hwvol_tq, snd_m3_update_hw_volume, (unsigned long)chip); 2795 2805
Note:
See TracChangeset
for help on using the changeset viewer.