Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ALSA: hda - Fix EAPD to low on CZC P10T tablet computer with ALC662
ALSA: HDA: Add SKU ignore for another Thinkpad Edge 14
ALSA: hda - Fix "unused variable" compile warning
ALSA: hda - Add quirk for HP Z-series workstation
Revert "ALSA: HDA: Create mixers on ALC887"
ASoC: PXA: Fix codec address on Zipit Z2
ASoC: PXA: Fix jack detection on Zipit Z2
ASoC: Blackfin: fix DAI/SPORT config dependency issues
ASoC: Blackfin TDM: use external frame syncs
ASoC: Blackfin AC97: fix build error after multi-component update
ASoC: Blackfin TDM: fix missed snd_soc_dai_get_drvdata update
ASoC: documentation updates
ALSA: ice1712 delta - initialize SPI clock

+79 -77
+21 -24
Documentation/sound/alsa/soc/codec.txt
··· 27 28 1 - Codec DAI and PCM configuration 29 ----------------------------------- 30 - Each codec driver must have a struct snd_soc_codec_dai to define its DAI and 31 PCM capabilities and operations. This struct is exported so that it can be 32 registered with the core by your machine driver. 33 34 e.g. 35 36 - struct snd_soc_codec_dai wm8731_dai = { 37 - .name = "WM8731", 38 - /* playback capabilities */ 39 .playback = { 40 .stream_name = "Playback", 41 .channels_min = 1, 42 .channels_max = 2, 43 .rates = WM8731_RATES, 44 .formats = WM8731_FORMATS,}, 45 - /* capture capabilities */ 46 .capture = { 47 .stream_name = "Capture", 48 .channels_min = 1, 49 .channels_max = 2, 50 .rates = WM8731_RATES, 51 .formats = WM8731_FORMATS,}, 52 - /* pcm operations - see section 4 below */ 53 - .ops = { 54 - .prepare = wm8731_pcm_prepare, 55 - .hw_params = wm8731_hw_params, 56 - .shutdown = wm8731_shutdown, 57 - }, 58 - /* DAI operations - see DAI.txt */ 59 - .dai_ops = { 60 - .digital_mute = wm8731_mute, 61 - .set_sysclk = wm8731_set_dai_sysclk, 62 - .set_fmt = wm8731_set_dai_fmt, 63 - } 64 }; 65 - EXPORT_SYMBOL_GPL(wm8731_dai); 66 67 68 2 - Codec control IO ··· 182 183 i.e. 184 185 - static int wm8974_mute(struct snd_soc_codec *codec, 186 - struct snd_soc_codec_dai *dai, int mute) 187 { 188 - u16 mute_reg = wm8974_read_reg_cache(codec, WM8974_DAC) & 0xffbf; 189 - if(mute) 190 - wm8974_write(codec, WM8974_DAC, mute_reg | 0x40); 191 else 192 - wm8974_write(codec, WM8974_DAC, mute_reg); 193 return 0; 194 }
··· 27 28 1 - Codec DAI and PCM configuration 29 ----------------------------------- 30 + Each codec driver must have a struct snd_soc_dai_driver to define its DAI and 31 PCM capabilities and operations. This struct is exported so that it can be 32 registered with the core by your machine driver. 33 34 e.g. 35 36 + static struct snd_soc_dai_ops wm8731_dai_ops = { 37 + .prepare = wm8731_pcm_prepare, 38 + .hw_params = wm8731_hw_params, 39 + .shutdown = wm8731_shutdown, 40 + .digital_mute = wm8731_mute, 41 + .set_sysclk = wm8731_set_dai_sysclk, 42 + .set_fmt = wm8731_set_dai_fmt, 43 + }; 44 + 45 + struct snd_soc_dai_driver wm8731_dai = { 46 + .name = "wm8731-hifi", 47 .playback = { 48 .stream_name = "Playback", 49 .channels_min = 1, 50 .channels_max = 2, 51 .rates = WM8731_RATES, 52 .formats = WM8731_FORMATS,}, 53 .capture = { 54 .stream_name = "Capture", 55 .channels_min = 1, 56 .channels_max = 2, 57 .rates = WM8731_RATES, 58 .formats = WM8731_FORMATS,}, 59 + .ops = &wm8731_dai_ops, 60 + .symmetric_rates = 1, 61 }; 62 63 64 2 - Codec control IO ··· 186 187 i.e. 188 189 + static int wm8974_mute(struct snd_soc_dai *dai, int mute) 190 { 191 + struct snd_soc_codec *codec = dai->codec; 192 + u16 mute_reg = snd_soc_read(codec, WM8974_DAC) & 0xffbf; 193 + 194 + if (mute) 195 + snd_soc_write(codec, WM8974_DAC, mute_reg | 0x40); 196 else 197 + snd_soc_write(codec, WM8974_DAC, mute_reg); 198 return 0; 199 }
+9 -29
Documentation/sound/alsa/soc/machine.txt
··· 12 struct snd_soc_card { 13 char *name; 14 15 int (*probe)(struct platform_device *pdev); 16 int (*remove)(struct platform_device *pdev); 17 ··· 24 int (*resume_pre)(struct platform_device *pdev); 25 int (*resume_post)(struct platform_device *pdev); 26 27 - /* machine stream operations */ 28 - struct snd_soc_ops *ops; 29 30 /* CPU <--> Codec DAI links */ 31 struct snd_soc_dai_link *dai_link; 32 int num_links; 33 }; 34 35 probe()/remove() ··· 43 The machine driver has pre and post versions of suspend and resume to take care 44 of any machine audio tasks that have to be done before or after the codec, DAIs 45 and DMA is suspended and resumed. Optional. 46 - 47 - 48 - Machine operations 49 - ------------------ 50 - The machine specific audio operations can be set here. Again this is optional. 51 52 53 Machine DAI Configuration ··· 59 static struct snd_soc_dai_link corgi_dai = { 60 .name = "WM8731", 61 .stream_name = "WM8731", 62 - .cpu_dai = &pxa_i2s_dai, 63 - .codec_dai = &wm8731_dai, 64 .init = corgi_wm8731_init, 65 .ops = &corgi_ops, 66 }; ··· 74 .name = "Corgi", 75 .dai_link = &corgi_dai, 76 .num_links = 1, 77 - }; 78 - 79 - 80 - Machine Audio Subsystem 81 - ----------------------- 82 - 83 - The machine soc device glues the platform, machine and codec driver together. 84 - Private data can also be set here. e.g. 85 - 86 - /* corgi audio private data */ 87 - static struct wm8731_setup_data corgi_wm8731_setup = { 88 - .i2c_address = 0x1b, 89 - }; 90 - 91 - /* corgi audio subsystem */ 92 - static struct snd_soc_device corgi_snd_devdata = { 93 - .machine = &snd_soc_corgi, 94 - .platform = &pxa2xx_soc_platform, 95 - .codec_dev = &soc_codec_dev_wm8731, 96 - .codec_data = &corgi_wm8731_setup, 97 }; 98 99
··· 12 struct snd_soc_card { 13 char *name; 14 15 + ... 16 + 17 int (*probe)(struct platform_device *pdev); 18 int (*remove)(struct platform_device *pdev); 19 ··· 22 int (*resume_pre)(struct platform_device *pdev); 23 int (*resume_post)(struct platform_device *pdev); 24 25 + ... 26 27 /* CPU <--> Codec DAI links */ 28 struct snd_soc_dai_link *dai_link; 29 int num_links; 30 + 31 + ... 32 }; 33 34 probe()/remove() ··· 40 The machine driver has pre and post versions of suspend and resume to take care 41 of any machine audio tasks that have to be done before or after the codec, DAIs 42 and DMA is suspended and resumed. Optional. 43 44 45 Machine DAI Configuration ··· 61 static struct snd_soc_dai_link corgi_dai = { 62 .name = "WM8731", 63 .stream_name = "WM8731", 64 + .cpu_dai_name = "pxa-is2-dai", 65 + .codec_dai_name = "wm8731-hifi", 66 + .platform_name = "pxa-pcm-audio", 67 + .codec_name = "wm8713-codec.0-001a", 68 .init = corgi_wm8731_init, 69 .ops = &corgi_ops, 70 }; ··· 74 .name = "Corgi", 75 .dai_link = &corgi_dai, 76 .num_links = 1, 77 }; 78 79
+10 -2
Documentation/sound/alsa/soc/platform.txt
··· 20 int (*trigger)(struct snd_pcm_substream *, int); 21 }; 22 23 - The platform driver exports its DMA functionality via struct snd_soc_platform:- 24 25 - struct snd_soc_platform { 26 char *name; 27 28 int (*probe)(struct platform_device *pdev); ··· 34 /* pcm creation and destruction */ 35 int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *); 36 void (*pcm_free)(struct snd_pcm *); 37 38 /* platform stream ops */ 39 struct snd_pcm_ops *pcm_ops;
··· 20 int (*trigger)(struct snd_pcm_substream *, int); 21 }; 22 23 + The platform driver exports its DMA functionality via struct 24 + snd_soc_platform_driver:- 25 26 + struct snd_soc_platform_driver { 27 char *name; 28 29 int (*probe)(struct platform_device *pdev); ··· 33 /* pcm creation and destruction */ 34 int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *); 35 void (*pcm_free)(struct snd_pcm *); 36 + 37 + /* 38 + * For platform caused delay reporting. 39 + * Optional. 40 + */ 41 + snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *, 42 + struct snd_soc_dai *); 43 44 /* platform stream ops */ 45 struct snd_pcm_ops *pcm_ops;
+17 -9
sound/pci/hda/patch_realtek.c
··· 1721 { 1722 struct alc_spec *spec = codec->spec; 1723 int id = spec->fixup_id; 1724 const char *modelname = spec->fixup_name; 1725 int depth = 0; 1726 1727 if (!spec->fixup_list) ··· 10932 return 0; 10933 } 10934 10935 - static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, 10936 - const struct auto_pin_cfg *cfg); 10937 - 10938 /* almost identical with ALC880 parser... */ 10939 static int alc882_parse_auto_config(struct hda_codec *codec) 10940 { ··· 10949 err = alc880_auto_fill_dac_nids(spec, &spec->autocfg); 10950 if (err < 0) 10951 return err; 10952 - if (codec->vendor_id == 0x10ec0887) 10953 - err = alc861vd_auto_create_multi_out_ctls(spec, &spec->autocfg); 10954 - else 10955 - err = alc880_auto_create_multi_out_ctls(spec, &spec->autocfg); 10956 if (err < 0) 10957 return err; 10958 err = alc880_auto_create_extra_out(spec, spec->autocfg.hp_pins[0], ··· 12630 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1200, "HP xw series", 12631 ALC262_HP_BPC), 12632 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1300, "HP xw series", 12633 ALC262_HP_BPC), 12634 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1700, "HP xw series", 12635 ALC262_HP_BPC), ··· 14955 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), 14956 SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), 14957 SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), 14958 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), 14959 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), 14960 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), ··· 17133 #define alc861vd_idx_to_mixer_switch(nid) ((nid) + 0x0c) 17134 17135 /* add playback controls from the parsed DAC table */ 17136 - /* Based on ALC880 version. But ALC861VD and ALC887 have separate, 17137 * different NIDs for mute/unmute switch and volume control */ 17138 static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, 17139 const struct auto_pin_cfg *cfg) ··· 19460 ALC662_FIXUP_ASPIRE, 19461 ALC662_FIXUP_IDEAPAD, 19462 ALC272_FIXUP_MARIO, 19463 }; 19464 19465 static const struct alc_fixup alc662_fixups[] = { ··· 19481 [ALC272_FIXUP_MARIO] = { 19482 .type = ALC_FIXUP_FUNC, 19483 .v.func = alc272_fixup_mario, 19484 - } 19485 }; 19486 19487 static struct snd_pci_quirk alc662_fixup_tbl[] = { ··· 19496 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), 19497 SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD), 19498 SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD), 19499 {} 19500 }; 19501
··· 1721 { 1722 struct alc_spec *spec = codec->spec; 1723 int id = spec->fixup_id; 1724 + #ifdef CONFIG_SND_DEBUG_VERBOSE 1725 const char *modelname = spec->fixup_name; 1726 + #endif 1727 int depth = 0; 1728 1729 if (!spec->fixup_list) ··· 10930 return 0; 10931 } 10932 10933 /* almost identical with ALC880 parser... */ 10934 static int alc882_parse_auto_config(struct hda_codec *codec) 10935 { ··· 10950 err = alc880_auto_fill_dac_nids(spec, &spec->autocfg); 10951 if (err < 0) 10952 return err; 10953 + err = alc880_auto_create_multi_out_ctls(spec, &spec->autocfg); 10954 if (err < 0) 10955 return err; 10956 err = alc880_auto_create_extra_out(spec, spec->autocfg.hp_pins[0], ··· 12634 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1200, "HP xw series", 12635 ALC262_HP_BPC), 12636 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1300, "HP xw series", 12637 + ALC262_HP_BPC), 12638 + SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1500, "HP z series", 12639 ALC262_HP_BPC), 12640 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1700, "HP xw series", 12641 ALC262_HP_BPC), ··· 14957 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), 14958 SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), 14959 SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), 14960 + SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), 14961 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), 14962 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), 14963 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), ··· 17134 #define alc861vd_idx_to_mixer_switch(nid) ((nid) + 0x0c) 17135 17136 /* add playback controls from the parsed DAC table */ 17137 + /* Based on ALC880 version. But ALC861VD has separate, 17138 * different NIDs for mute/unmute switch and volume control */ 17139 static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, 17140 const struct auto_pin_cfg *cfg) ··· 19461 ALC662_FIXUP_ASPIRE, 19462 ALC662_FIXUP_IDEAPAD, 19463 ALC272_FIXUP_MARIO, 19464 + ALC662_FIXUP_CZC_P10T, 19465 }; 19466 19467 static const struct alc_fixup alc662_fixups[] = { ··· 19481 [ALC272_FIXUP_MARIO] = { 19482 .type = ALC_FIXUP_FUNC, 19483 .v.func = alc272_fixup_mario, 19484 + }, 19485 + [ALC662_FIXUP_CZC_P10T] = { 19486 + .type = ALC_FIXUP_VERBS, 19487 + .v.verbs = (const struct hda_verb[]) { 19488 + {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0}, 19489 + {} 19490 + } 19491 + }, 19492 }; 19493 19494 static struct snd_pci_quirk alc662_fixup_tbl[] = { ··· 19489 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), 19490 SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD), 19491 SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD), 19492 + SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T), 19493 {} 19494 }; 19495
+7
sound/pci/ice1712/delta.c
··· 580 { 581 int err; 582 struct snd_akm4xxx *ak; 583 584 if (ice->eeprom.subvendor == ICE1712_SUBDEVICE_DELTA1010 && 585 ice->eeprom.gpiodir == 0x7b) ··· 622 ice->num_total_adcs = 4; 623 break; 624 } 625 626 /* initialize spdif */ 627 switch (ice->eeprom.subvendor) {
··· 580 { 581 int err; 582 struct snd_akm4xxx *ak; 583 + unsigned char tmp; 584 585 if (ice->eeprom.subvendor == ICE1712_SUBDEVICE_DELTA1010 && 586 ice->eeprom.gpiodir == 0x7b) ··· 621 ice->num_total_adcs = 4; 622 break; 623 } 624 + 625 + /* initialize the SPI clock to high */ 626 + tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); 627 + tmp |= ICE1712_DELTA_AP_CCLK; 628 + snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); 629 + udelay(5); 630 631 /* initialize spdif */ 632 switch (ice->eeprom.subvendor) {
+6 -5
sound/soc/blackfin/Kconfig
··· 1 config SND_BF5XX_I2S 2 tristate "SoC I2S Audio for the ADI BF5xx chip" 3 depends on BLACKFIN 4 help 5 Say Y or M if you want to add support for codecs attached to 6 the Blackfin SPORT (synchronous serial ports) interface in I2S ··· 36 config SND_BF5XX_TDM 37 tristate "SoC I2S(TDM mode) Audio for the ADI BF5xx chip" 38 depends on (BLACKFIN && SND_SOC) 39 help 40 Say Y or M if you want to add support for codecs attached to 41 the Blackfin SPORT (synchronous serial ports) interface in TDM ··· 63 config SND_BF5XX_AC97 64 tristate "SoC AC97 Audio for the ADI BF5xx chip" 65 depends on BLACKFIN 66 help 67 Say Y or M if you want to add support for codecs attached to 68 the Blackfin SPORT (synchronous serial ports) interface in slot 16 ··· 128 129 config SND_BF5XX_SOC_I2S 130 tristate 131 - select SND_BF5XX_SOC_SPORT 132 133 config SND_BF5XX_SOC_TDM 134 tristate 135 - select SND_BF5XX_SOC_SPORT 136 137 config SND_BF5XX_SOC_AC97 138 tristate 139 - select AC97_BUS 140 - select SND_SOC_AC97_BUS 141 - select SND_BF5XX_SOC_SPORT 142 143 config SND_BF5XX_SPORT_NUM 144 int "Set a SPORT for Sound chip"
··· 1 config SND_BF5XX_I2S 2 tristate "SoC I2S Audio for the ADI BF5xx chip" 3 depends on BLACKFIN 4 + select SND_BF5XX_SOC_SPORT 5 help 6 Say Y or M if you want to add support for codecs attached to 7 the Blackfin SPORT (synchronous serial ports) interface in I2S ··· 35 config SND_BF5XX_TDM 36 tristate "SoC I2S(TDM mode) Audio for the ADI BF5xx chip" 37 depends on (BLACKFIN && SND_SOC) 38 + select SND_BF5XX_SOC_SPORT 39 help 40 Say Y or M if you want to add support for codecs attached to 41 the Blackfin SPORT (synchronous serial ports) interface in TDM ··· 61 config SND_BF5XX_AC97 62 tristate "SoC AC97 Audio for the ADI BF5xx chip" 63 depends on BLACKFIN 64 + select AC97_BUS 65 + select SND_SOC_AC97_BUS 66 + select SND_BF5XX_SOC_SPORT 67 + select SND_BF5XX_SOC_AC97 68 help 69 Say Y or M if you want to add support for codecs attached to 70 the Blackfin SPORT (synchronous serial ports) interface in slot 16 ··· 122 123 config SND_BF5XX_SOC_I2S 124 tristate 125 126 config SND_BF5XX_SOC_TDM 127 tristate 128 129 config SND_BF5XX_SOC_AC97 130 tristate 131 132 config SND_BF5XX_SPORT_NUM 133 int "Set a SPORT for Sound chip"
+2 -2
sound/soc/blackfin/bf5xx-ac97.c
··· 260 pr_debug("%s : sport %d\n", __func__, dai->id); 261 if (!dai->active) 262 return 0; 263 - if (dai->capture.active) 264 sport_rx_stop(sport); 265 - if (dai->playback.active) 266 sport_tx_stop(sport); 267 return 0; 268 }
··· 260 pr_debug("%s : sport %d\n", __func__, dai->id); 261 if (!dai->active) 262 return 0; 263 + if (dai->capture_active) 264 sport_rx_stop(sport); 265 + if (dai->playback_active) 266 sport_tx_stop(sport); 267 return 0; 268 }
+5 -5
sound/soc/blackfin/bf5xx-tdm.c
··· 210 #ifdef CONFIG_PM 211 static int bf5xx_tdm_suspend(struct snd_soc_dai *dai) 212 { 213 - struct sport_device *sport = dai->private_data; 214 215 if (!dai->active) 216 return 0; ··· 235 ret = -EBUSY; 236 } 237 238 - ret = sport_config_rx(sport, IRFS, 0x1F, 0, 0); 239 if (ret) { 240 pr_err("SPORT is busy!\n"); 241 ret = -EBUSY; 242 } 243 244 - ret = sport_config_tx(sport, ITFS, 0x1F, 0, 0); 245 if (ret) { 246 pr_err("SPORT is busy!\n"); 247 ret = -EBUSY; ··· 303 goto sport_config_err; 304 } 305 306 - ret = sport_config_rx(sport_handle, IRFS, 0x1F, 0, 0); 307 if (ret) { 308 pr_err("SPORT is busy!\n"); 309 ret = -EBUSY; 310 goto sport_config_err; 311 } 312 313 - ret = sport_config_tx(sport_handle, ITFS, 0x1F, 0, 0); 314 if (ret) { 315 pr_err("SPORT is busy!\n"); 316 ret = -EBUSY;
··· 210 #ifdef CONFIG_PM 211 static int bf5xx_tdm_suspend(struct snd_soc_dai *dai) 212 { 213 + struct sport_device *sport = snd_soc_dai_get_drvdata(dai); 214 215 if (!dai->active) 216 return 0; ··· 235 ret = -EBUSY; 236 } 237 238 + ret = sport_config_rx(sport, 0, 0x1F, 0, 0); 239 if (ret) { 240 pr_err("SPORT is busy!\n"); 241 ret = -EBUSY; 242 } 243 244 + ret = sport_config_tx(sport, 0, 0x1F, 0, 0); 245 if (ret) { 246 pr_err("SPORT is busy!\n"); 247 ret = -EBUSY; ··· 303 goto sport_config_err; 304 } 305 306 + ret = sport_config_rx(sport_handle, 0, 0x1F, 0, 0); 307 if (ret) { 308 pr_err("SPORT is busy!\n"); 309 ret = -EBUSY; 310 goto sport_config_err; 311 } 312 313 + ret = sport_config_tx(sport_handle, 0, 0x1F, 0, 0); 314 if (ret) { 315 pr_err("SPORT is busy!\n"); 316 ret = -EBUSY;
+2 -1
sound/soc/pxa/z2.c
··· 104 .name = "hsdet-gpio", 105 .report = SND_JACK_HEADSET, 106 .debounce_time = 200, 107 }, 108 }; 109 ··· 193 .cpu_dai_name = "pxa2xx-i2s", 194 .codec_dai_name = "wm8750-hifi", 195 .platform_name = "pxa-pcm-audio", 196 - .codec_name = "wm8750-codec.0-001a", 197 .init = z2_wm8750_init, 198 .ops = &z2_ops, 199 };
··· 104 .name = "hsdet-gpio", 105 .report = SND_JACK_HEADSET, 106 .debounce_time = 200, 107 + .invert = 1, 108 }, 109 }; 110 ··· 192 .cpu_dai_name = "pxa2xx-i2s", 193 .codec_dai_name = "wm8750-hifi", 194 .platform_name = "pxa-pcm-audio", 195 + .codec_name = "wm8750-codec.0-001b", 196 .init = z2_wm8750_init, 197 .ops = &z2_ops, 198 };