Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: use linux/io.h to fix compile warnings
ALSA: hda - Fix memory leaks in conexant jack arrays
ASoC: CX20442: fix NULL pointer dereference
ASoC: Amstrad Delta: fix const related build error
ALSA: oxygen: fix output routing on Xonar DG
sound: silent echo'ed messages in Makefile
ASoC: Fix mask/val_mask confusion snd_soc_dapm_put_volsw()
ASoC: DaVinci: fix kernel panic due to uninitialized platform_data
ALSA: HDA: Fix microphone(s) on Lenovo Edge 13
ASoC: Fix module refcount for auxiliary devices
ALSA: HDA: cxt5066 - Use asus model for Asus U50F, select correct SPDIF output
ALSA: HDA: Add a new model "asus" for Conexant 5066/205xx
ALSA: HDA: Refactor some redundant code for Conexant 5066/205xx

+138 -79
+1
Documentation/sound/alsa/HD-Audio-Models.txt
··· 296 296 ============= 297 297 laptop Basic Laptop config (default) 298 298 hp-laptop HP laptops, e g G60 299 + asus Asus K52JU, Lenovo G560 299 300 dell-laptop Dell laptops 300 301 dell-vostro Dell Vostro 301 302 olpc-xo-1_5 OLPC XO 1.5
+1 -2
sound/drivers/mtpav.c
··· 55 55 #include <linux/err.h> 56 56 #include <linux/platform_device.h> 57 57 #include <linux/ioport.h> 58 + #include <linux/io.h> 58 59 #include <linux/moduleparam.h> 59 60 #include <sound/core.h> 60 61 #include <sound/initval.h> 61 62 #include <sound/rawmidi.h> 62 63 #include <linux/delay.h> 63 - 64 - #include <asm/io.h> 65 64 66 65 /* 67 66 * globals
+2 -2
sound/oss/Makefile
··· 87 87 $(obj)/bin2hex pss_synth < $< > $@ 88 88 else 89 89 $(obj)/pss_boot.h: 90 - ( \ 90 + $(Q)( \ 91 91 echo 'static unsigned char * pss_synth = NULL;'; \ 92 92 echo 'static int pss_synthLen = 0;'; \ 93 93 ) > $@ ··· 102 102 $(obj)/hex2hex -i trix_boot < $< > $@ 103 103 else 104 104 $(obj)/trix_boot.h: 105 - ( \ 105 + $(Q)( \ 106 106 echo 'static unsigned char * trix_boot = NULL;'; \ 107 107 echo 'static int trix_boot_len = 0;'; \ 108 108 ) > $@
+85 -64
sound/pci/hda/patch_conexant.c
··· 85 85 unsigned int auto_mic; 86 86 int auto_mic_ext; /* autocfg.inputs[] index for ext mic */ 87 87 unsigned int need_dac_fix; 88 + hda_nid_t slave_dig_outs[2]; 88 89 89 90 /* capture */ 90 91 unsigned int num_adc_nids; ··· 128 127 unsigned int ideapad:1; 129 128 unsigned int thinkpad:1; 130 129 unsigned int hp_laptop:1; 130 + unsigned int asus:1; 131 131 132 132 unsigned int ext_mic_present; 133 133 unsigned int recording; ··· 354 352 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 355 353 spec->dig_in_nid; 356 354 } 355 + if (spec->slave_dig_outs[0]) 356 + codec->slave_dig_outs = spec->slave_dig_outs; 357 357 } 358 358 359 359 return 0; ··· 407 403 struct conexant_spec *spec; 408 404 struct conexant_jack *jack; 409 405 const char *name; 410 - int err; 406 + int i, err; 411 407 412 408 spec = codec->spec; 413 409 snd_array_init(&spec->jacks, sizeof(*jack), 32); 410 + 411 + jack = spec->jacks.list; 412 + for (i = 0; i < spec->jacks.used; i++, jack++) 413 + if (jack->nid == nid) 414 + return 0 ; /* already present */ 415 + 414 416 jack = snd_array_new(&spec->jacks); 415 417 name = (type == SND_JACK_HEADPHONE) ? "Headphone" : "Mic" ; 416 418 ··· 2110 2100 static hda_nid_t cxt5066_dac_nids[1] = { 0x10 }; 2111 2101 static hda_nid_t cxt5066_adc_nids[3] = { 0x14, 0x15, 0x16 }; 2112 2102 static hda_nid_t cxt5066_capsrc_nids[1] = { 0x17 }; 2113 - #define CXT5066_SPDIF_OUT 0x21 2103 + static hda_nid_t cxt5066_digout_pin_nids[2] = { 0x20, 0x22 }; 2114 2104 2115 2105 /* OLPC's microphone port is DC coupled for use with external sensors, 2116 2106 * therefore we use a 50% mic bias in order to center the input signal with ··· 2322 2312 } 2323 2313 } 2324 2314 2315 + 2316 + /* toggle input of built-in digital mic and mic jack appropriately */ 2317 + static void cxt5066_asus_automic(struct hda_codec *codec) 2318 + { 2319 + unsigned int present; 2320 + 2321 + present = snd_hda_jack_detect(codec, 0x1b); 2322 + snd_printdd("CXT5066: external microphone present=%d\n", present); 2323 + snd_hda_codec_write(codec, 0x17, 0, AC_VERB_SET_CONNECT_SEL, 2324 + present ? 1 : 0); 2325 + } 2326 + 2327 + 2325 2328 /* toggle input of built-in digital mic and mic jack appropriately */ 2326 2329 static void cxt5066_hp_laptop_automic(struct hda_codec *codec) 2327 2330 { ··· 2410 2387 cxt5066_update_speaker(codec); 2411 2388 } 2412 2389 2390 + /* Dispatch the right mic autoswitch function */ 2391 + static void cxt5066_automic(struct hda_codec *codec) 2392 + { 2393 + struct conexant_spec *spec = codec->spec; 2394 + 2395 + if (spec->dell_vostro) 2396 + cxt5066_vostro_automic(codec); 2397 + else if (spec->ideapad) 2398 + cxt5066_ideapad_automic(codec); 2399 + else if (spec->thinkpad) 2400 + cxt5066_thinkpad_automic(codec); 2401 + else if (spec->hp_laptop) 2402 + cxt5066_hp_laptop_automic(codec); 2403 + else if (spec->asus) 2404 + cxt5066_asus_automic(codec); 2405 + } 2406 + 2413 2407 /* unsolicited event for jack sensing */ 2414 2408 static void cxt5066_olpc_unsol_event(struct hda_codec *codec, unsigned int res) 2415 2409 { ··· 2445 2405 } 2446 2406 2447 2407 /* unsolicited event for jack sensing */ 2448 - static void cxt5066_vostro_event(struct hda_codec *codec, unsigned int res) 2408 + static void cxt5066_unsol_event(struct hda_codec *codec, unsigned int res) 2449 2409 { 2450 - snd_printdd("CXT5066_vostro: unsol event %x (%x)\n", res, res >> 26); 2410 + snd_printdd("CXT5066: unsol event %x (%x)\n", res, res >> 26); 2451 2411 switch (res >> 26) { 2452 2412 case CONEXANT_HP_EVENT: 2453 2413 cxt5066_hp_automute(codec); 2454 2414 break; 2455 2415 case CONEXANT_MIC_EVENT: 2456 - cxt5066_vostro_automic(codec); 2416 + cxt5066_automic(codec); 2457 2417 break; 2458 2418 } 2459 2419 } 2460 2420 2461 - /* unsolicited event for jack sensing */ 2462 - static void cxt5066_ideapad_event(struct hda_codec *codec, unsigned int res) 2463 - { 2464 - snd_printdd("CXT5066_ideapad: unsol event %x (%x)\n", res, res >> 26); 2465 - switch (res >> 26) { 2466 - case CONEXANT_HP_EVENT: 2467 - cxt5066_hp_automute(codec); 2468 - break; 2469 - case CONEXANT_MIC_EVENT: 2470 - cxt5066_ideapad_automic(codec); 2471 - break; 2472 - } 2473 - } 2474 - 2475 - /* unsolicited event for jack sensing */ 2476 - static void cxt5066_hp_laptop_event(struct hda_codec *codec, unsigned int res) 2477 - { 2478 - snd_printdd("CXT5066_hp_laptop: unsol event %x (%x)\n", res, res >> 26); 2479 - switch (res >> 26) { 2480 - case CONEXANT_HP_EVENT: 2481 - cxt5066_hp_automute(codec); 2482 - break; 2483 - case CONEXANT_MIC_EVENT: 2484 - cxt5066_hp_laptop_automic(codec); 2485 - break; 2486 - } 2487 - } 2488 - 2489 - /* unsolicited event for jack sensing */ 2490 - static void cxt5066_thinkpad_event(struct hda_codec *codec, unsigned int res) 2491 - { 2492 - snd_printdd("CXT5066_thinkpad: unsol event %x (%x)\n", res, res >> 26); 2493 - switch (res >> 26) { 2494 - case CONEXANT_HP_EVENT: 2495 - cxt5066_hp_automute(codec); 2496 - break; 2497 - case CONEXANT_MIC_EVENT: 2498 - cxt5066_thinkpad_automic(codec); 2499 - break; 2500 - } 2501 - } 2502 2421 2503 2422 static const struct hda_input_mux cxt5066_analog_mic_boost = { 2504 2423 .num_items = 5, ··· 2630 2631 2631 2632 snd_hda_sequence_write(codec, disable_mics); 2632 2633 spec->recording = 0; 2634 + } 2635 + 2636 + static void conexant_check_dig_outs(struct hda_codec *codec, 2637 + hda_nid_t *dig_pins, 2638 + int num_pins) 2639 + { 2640 + struct conexant_spec *spec = codec->spec; 2641 + hda_nid_t *nid_loc = &spec->multiout.dig_out_nid; 2642 + int i; 2643 + 2644 + for (i = 0; i < num_pins; i++, dig_pins++) { 2645 + unsigned int cfg = snd_hda_codec_get_pincfg(codec, *dig_pins); 2646 + if (get_defcfg_connect(cfg) == AC_JACK_PORT_NONE) 2647 + continue; 2648 + if (snd_hda_get_connections(codec, *dig_pins, nid_loc, 1) != 1) 2649 + continue; 2650 + if (spec->slave_dig_outs[0]) 2651 + nid_loc++; 2652 + else 2653 + nid_loc = spec->slave_dig_outs; 2654 + } 2633 2655 } 2634 2656 2635 2657 static struct hda_input_mux cxt5066_capture_source = { ··· 3059 3039 /* initialize jack-sensing, too */ 3060 3040 static int cxt5066_init(struct hda_codec *codec) 3061 3041 { 3062 - struct conexant_spec *spec = codec->spec; 3063 - 3064 3042 snd_printdd("CXT5066: init\n"); 3065 3043 conexant_init(codec); 3066 3044 if (codec->patch_ops.unsol_event) { 3067 3045 cxt5066_hp_automute(codec); 3068 - if (spec->dell_vostro) 3069 - cxt5066_vostro_automic(codec); 3070 - else if (spec->ideapad) 3071 - cxt5066_ideapad_automic(codec); 3072 - else if (spec->thinkpad) 3073 - cxt5066_thinkpad_automic(codec); 3074 - else if (spec->hp_laptop) 3075 - cxt5066_hp_laptop_automic(codec); 3046 + cxt5066_automic(codec); 3076 3047 } 3077 3048 cxt5066_set_mic_boost(codec); 3078 3049 return 0; ··· 3091 3080 CXT5066_DELL_VOSTRO, /* Dell Vostro 1015i */ 3092 3081 CXT5066_IDEAPAD, /* Lenovo IdeaPad U150 */ 3093 3082 CXT5066_THINKPAD, /* Lenovo ThinkPad T410s, others? */ 3083 + CXT5066_ASUS, /* Asus K52JU, Lenovo G560 - Int mic at 0x1a and Ext mic at 0x1b */ 3094 3084 CXT5066_HP_LAPTOP, /* HP Laptop */ 3095 3085 CXT5066_MODELS 3096 3086 }; ··· 3103 3091 [CXT5066_DELL_VOSTRO] = "dell-vostro", 3104 3092 [CXT5066_IDEAPAD] = "ideapad", 3105 3093 [CXT5066_THINKPAD] = "thinkpad", 3094 + [CXT5066_ASUS] = "asus", 3106 3095 [CXT5066_HP_LAPTOP] = "hp-laptop", 3107 3096 }; 3108 3097 ··· 3115 3102 SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTRO), 3116 3103 SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD), 3117 3104 SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP), 3118 - SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_HP_LAPTOP), 3105 + SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_ASUS), 3106 + SND_PCI_QUIRK(0x1043, 0x1643, "Asus K52JU", CXT5066_ASUS), 3107 + SND_PCI_QUIRK(0x1043, 0x1993, "Asus U50F", CXT5066_ASUS), 3119 3108 SND_PCI_QUIRK(0x1179, 0xff1e, "Toshiba Satellite C650D", CXT5066_IDEAPAD), 3120 3109 SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba Satellite P500-PSPGSC-01800T", CXT5066_OLPC_XO_1_5), 3121 3110 SND_PCI_QUIRK(0x1179, 0xffe0, "Toshiba Satellite Pro T130-15F", CXT5066_OLPC_XO_1_5), ··· 3126 3111 SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT5066_OLPC_XO_1_5), 3127 3112 SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400s", CXT5066_THINKPAD), 3128 3113 SND_PCI_QUIRK(0x17aa, 0x21c5, "Thinkpad Edge 13", CXT5066_THINKPAD), 3114 + SND_PCI_QUIRK(0x17aa, 0x21c6, "Thinkpad Edge 13", CXT5066_ASUS), 3129 3115 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD), 3116 + SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G560", CXT5066_ASUS), 3130 3117 SND_PCI_QUIRK_VENDOR(0x17aa, "Lenovo", CXT5066_IDEAPAD), /* Fallback for Lenovos without dock mic */ 3131 3118 {} 3132 3119 }; ··· 3150 3133 spec->multiout.max_channels = 2; 3151 3134 spec->multiout.num_dacs = ARRAY_SIZE(cxt5066_dac_nids); 3152 3135 spec->multiout.dac_nids = cxt5066_dac_nids; 3153 - spec->multiout.dig_out_nid = CXT5066_SPDIF_OUT; 3136 + conexant_check_dig_outs(codec, cxt5066_digout_pin_nids, 3137 + ARRAY_SIZE(cxt5066_digout_pin_nids)); 3154 3138 spec->num_adc_nids = 1; 3155 3139 spec->adc_nids = cxt5066_adc_nids; 3156 3140 spec->capsrc_nids = cxt5066_capsrc_nids; ··· 3185 3167 spec->num_init_verbs++; 3186 3168 spec->dell_automute = 1; 3187 3169 break; 3170 + case CXT5066_ASUS: 3188 3171 case CXT5066_HP_LAPTOP: 3189 3172 codec->patch_ops.init = cxt5066_init; 3190 - codec->patch_ops.unsol_event = cxt5066_hp_laptop_event; 3173 + codec->patch_ops.unsol_event = cxt5066_unsol_event; 3191 3174 spec->init_verbs[spec->num_init_verbs] = 3192 3175 cxt5066_init_verbs_hp_laptop; 3193 3176 spec->num_init_verbs++; 3194 - spec->hp_laptop = 1; 3177 + spec->hp_laptop = board_config == CXT5066_HP_LAPTOP; 3178 + spec->asus = board_config == CXT5066_ASUS; 3195 3179 spec->mixers[spec->num_mixers++] = cxt5066_mixer_master; 3196 3180 spec->mixers[spec->num_mixers++] = cxt5066_mixers; 3197 3181 /* no S/PDIF out */ 3198 - spec->multiout.dig_out_nid = 0; 3182 + if (board_config == CXT5066_HP_LAPTOP) 3183 + spec->multiout.dig_out_nid = 0; 3199 3184 /* input source automatically selected */ 3200 3185 spec->input_mux = NULL; 3201 3186 spec->port_d_mode = 0; ··· 3228 3207 break; 3229 3208 case CXT5066_DELL_VOSTRO: 3230 3209 codec->patch_ops.init = cxt5066_init; 3231 - codec->patch_ops.unsol_event = cxt5066_vostro_event; 3210 + codec->patch_ops.unsol_event = cxt5066_unsol_event; 3232 3211 spec->init_verbs[0] = cxt5066_init_verbs_vostro; 3233 3212 spec->mixers[spec->num_mixers++] = cxt5066_mixer_master_olpc; 3234 3213 spec->mixers[spec->num_mixers++] = cxt5066_mixers; ··· 3245 3224 break; 3246 3225 case CXT5066_IDEAPAD: 3247 3226 codec->patch_ops.init = cxt5066_init; 3248 - codec->patch_ops.unsol_event = cxt5066_ideapad_event; 3227 + codec->patch_ops.unsol_event = cxt5066_unsol_event; 3249 3228 spec->mixers[spec->num_mixers++] = cxt5066_mixer_master; 3250 3229 spec->mixers[spec->num_mixers++] = cxt5066_mixers; 3251 3230 spec->init_verbs[0] = cxt5066_init_verbs_ideapad; ··· 3261 3240 break; 3262 3241 case CXT5066_THINKPAD: 3263 3242 codec->patch_ops.init = cxt5066_init; 3264 - codec->patch_ops.unsol_event = cxt5066_thinkpad_event; 3243 + codec->patch_ops.unsol_event = cxt5066_unsol_event; 3265 3244 spec->mixers[spec->num_mixers++] = cxt5066_mixer_master; 3266 3245 spec->mixers[spec->num_mixers++] = cxt5066_mixers; 3267 3246 spec->init_verbs[0] = cxt5066_init_verbs_thinkpad;
+2
sound/pci/oxygen/oxygen.h
··· 92 92 void (*update_dac_volume)(struct oxygen *chip); 93 93 void (*update_dac_mute)(struct oxygen *chip); 94 94 void (*update_center_lfe_mix)(struct oxygen *chip, bool mixed); 95 + unsigned int (*adjust_dac_routing)(struct oxygen *chip, 96 + unsigned int play_routing); 95 97 void (*gpio_changed)(struct oxygen *chip); 96 98 void (*uart_input)(struct oxygen *chip); 97 99 void (*ac97_switch)(struct oxygen *chip,
+2
sound/pci/oxygen/oxygen_mixer.c
··· 180 180 (1 << OXYGEN_PLAY_DAC1_SOURCE_SHIFT) | 181 181 (2 << OXYGEN_PLAY_DAC2_SOURCE_SHIFT) | 182 182 (3 << OXYGEN_PLAY_DAC3_SOURCE_SHIFT); 183 + if (chip->model.adjust_dac_routing) 184 + reg_value = chip->model.adjust_dac_routing(chip, reg_value); 183 185 oxygen_write16_masked(chip, OXYGEN_PLAY_ROUTING, reg_value, 184 186 OXYGEN_PLAY_DAC0_SOURCE_MASK | 185 187 OXYGEN_PLAY_DAC1_SOURCE_MASK |
+36
sound/pci/oxygen/xonar_dg.c
··· 24 24 * 25 25 * SPI 0 -> CS4245 26 26 * 27 + * I²S 1 -> CS4245 28 + * I²S 2 -> CS4361 (center/LFE) 29 + * I²S 3 -> CS4361 (surround) 30 + * I²S 4 -> CS4361 (front) 31 + * 27 32 * GPIO 3 <- ? 28 33 * GPIO 4 <- headphone detect 29 34 * GPIO 5 -> route input jack to line-in (0) or mic-in (1) ··· 41 36 * input 1 <- aux 42 37 * input 2 <- front mic 43 38 * input 4 <- line/mic 39 + * DAC out -> headphones 44 40 * aux out -> front panel headphones 45 41 */ 46 42 ··· 211 205 else 212 206 value |= CS4245_ADC_FM_QUAD; 213 207 cs4245_write_cached(chip, CS4245_ADC_CTRL, value); 208 + } 209 + 210 + static inline unsigned int shift_bits(unsigned int value, 211 + unsigned int shift_from, 212 + unsigned int shift_to, 213 + unsigned int mask) 214 + { 215 + if (shift_from < shift_to) 216 + return (value << (shift_to - shift_from)) & mask; 217 + else 218 + return (value >> (shift_from - shift_to)) & mask; 219 + } 220 + 221 + static unsigned int adjust_dg_dac_routing(struct oxygen *chip, 222 + unsigned int play_routing) 223 + { 224 + return (play_routing & OXYGEN_PLAY_DAC0_SOURCE_MASK) | 225 + shift_bits(play_routing, 226 + OXYGEN_PLAY_DAC2_SOURCE_SHIFT, 227 + OXYGEN_PLAY_DAC1_SOURCE_SHIFT, 228 + OXYGEN_PLAY_DAC1_SOURCE_MASK) | 229 + shift_bits(play_routing, 230 + OXYGEN_PLAY_DAC1_SOURCE_SHIFT, 231 + OXYGEN_PLAY_DAC2_SOURCE_SHIFT, 232 + OXYGEN_PLAY_DAC2_SOURCE_MASK) | 233 + shift_bits(play_routing, 234 + OXYGEN_PLAY_DAC0_SOURCE_SHIFT, 235 + OXYGEN_PLAY_DAC3_SOURCE_SHIFT, 236 + OXYGEN_PLAY_DAC3_SOURCE_MASK); 214 237 } 215 238 216 239 static int output_switch_info(struct snd_kcontrol *ctl, ··· 592 557 .resume = dg_resume, 593 558 .set_dac_params = set_cs4245_dac_params, 594 559 .set_adc_params = set_cs4245_adc_params, 560 + .adjust_dac_routing = adjust_dg_dac_routing, 595 561 .dump_registers = dump_cs4245_registers, 596 562 .model_data_size = sizeof(struct dg), 597 563 .device_config = PLAYBACK_0_TO_I2S |
+1 -1
sound/pcmcia/pdaudiocf/pdaudiocf.h
··· 22 22 #define __PDAUDIOCF_H 23 23 24 24 #include <sound/pcm.h> 25 - #include <asm/io.h> 25 + #include <linux/io.h> 26 26 #include <linux/interrupt.h> 27 27 #include <pcmcia/cistpl.h> 28 28 #include <pcmcia/ds.h>
+1 -1
sound/pcmcia/vx/vxp_ops.c
··· 23 23 #include <linux/delay.h> 24 24 #include <linux/device.h> 25 25 #include <linux/firmware.h> 26 + #include <linux/io.h> 26 27 #include <sound/core.h> 27 - #include <asm/io.h> 28 28 #include "vxpocket.h" 29 29 30 30
+1 -1
sound/soc/codecs/cq93vc.c
··· 153 153 154 154 static int cq93vc_probe(struct snd_soc_codec *codec) 155 155 { 156 - struct davinci_vc *davinci_vc = codec->dev->platform_data; 156 + struct davinci_vc *davinci_vc = snd_soc_codec_get_drvdata(codec); 157 157 158 158 davinci_vc->cq93vc.codec = codec; 159 159 codec->control_data = davinci_vc;
+3
sound/soc/codecs/cx20442.c
··· 367 367 return 0; 368 368 } 369 369 370 + static const u8 cx20442_reg = CX20442_TELOUT | CX20442_MIC; 371 + 370 372 static struct snd_soc_codec_driver cx20442_codec_dev = { 371 373 .probe = cx20442_codec_probe, 372 374 .remove = cx20442_codec_remove, 375 + .reg_cache_default = &cx20442_reg, 373 376 .reg_cache_size = 1, 374 377 .reg_word_size = sizeof(u8), 375 378 .read = cx20442_read_reg_cache,
-2
sound/soc/omap/ams-delta.c
··· 507 507 /* Set up digital mute if not provided by the codec */ 508 508 if (!codec_dai->driver->ops) { 509 509 codec_dai->driver->ops = &ams_delta_dai_ops; 510 - } else if (!codec_dai->driver->ops->digital_mute) { 511 - codec_dai->driver->ops->digital_mute = ams_delta_digital_mute; 512 510 } else { 513 511 ams_delta_ops.startup = ams_delta_startup; 514 512 ams_delta_ops.shutdown = ams_delta_shutdown;
-3
sound/soc/soc-core.c
··· 1664 1664 goto out; 1665 1665 1666 1666 found: 1667 - if (!try_module_get(codec->dev->driver->owner)) 1668 - return -ENODEV; 1669 - 1670 1667 ret = soc_probe_codec(card, codec); 1671 1668 if (ret < 0) 1672 1669 return ret;
+3 -3
sound/soc/soc-dapm.c
··· 1742 1742 int max = mc->max; 1743 1743 unsigned int mask = (1 << fls(max)) - 1; 1744 1744 unsigned int invert = mc->invert; 1745 - unsigned int val, val_mask; 1745 + unsigned int val; 1746 1746 int connect, change; 1747 1747 struct snd_soc_dapm_update update; 1748 1748 ··· 1750 1750 1751 1751 if (invert) 1752 1752 val = max - val; 1753 - val_mask = mask << shift; 1753 + mask = mask << shift; 1754 1754 val = val << shift; 1755 1755 1756 1756 mutex_lock(&widget->codec->mutex); 1757 1757 widget->value = val; 1758 1758 1759 - change = snd_soc_test_bits(widget->codec, reg, val_mask, val); 1759 + change = snd_soc_test_bits(widget->codec, reg, mask, val); 1760 1760 if (change) { 1761 1761 if (val) 1762 1762 /* new connection */