1. 04 Dec, 2013 4 commits
  2. 03 Dec, 2013 6 commits
  3. 02 Dec, 2013 11 commits
    • Takashi Iwai's avatar
      ALSA: hda - Use always amps for auto-mute on AD1986A codec · b3bd4fc3
      Takashi Iwai authored
      It seems that AD1986A cannot manage the dynamic pin on/off for
      auto-muting, but rather gets confused.  Since each output has own amp,
      let's use it instead.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=64971
      Cc: <stable@vger.kernel.org> [v3.11+]
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      b3bd4fc3
    • Takashi Iwai's avatar
      ALSA: hda/analog - Handle inverted EAPD properly in vmaster hook · ce8e0fd2
      Takashi Iwai authored
      ad_vmaster_eapd_hook() needs to handle the inverted EAPD case
      properly, too.  Otherwise the output gets broken on Lenovo N100 with
      AD1986A codec.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=64971Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      ce8e0fd2
    • Takashi Iwai's avatar
      ALSA: hda - Another fixup for ASUS laptop with ALC660 codec · e7ca237b
      Takashi Iwai authored
      ASUS Z35HL laptop also needs the very same fix as the previous one
      that was applied to ASUS W7J.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=66231
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      e7ca237b
    • Takashi Iwai's avatar
      ALSA: atmel: Fix possible array overflow · e4de211c
      Takashi Iwai authored
      The static checker found a possible array overflow in atmel/abdac.c:
        static checker warning: "sound/atmel/abdac.c:373 set_sample_rates()
              error: buffer overflow 'dac->rates' 6 <= 6"
      
      This patch papers over the buggy point, by ensuring that dac->rates[]
      update not overflowing the actual array size.
      Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      e4de211c
    • Takashi Iwai's avatar
      ALSA: hda - Fix complete_all() timing in deferred probes · 88d071fc
      Takashi Iwai authored
      When the probe of snd-hda-intel driver is deferred due to f/w loading
      or the nested module loading, complete_all() should be also delayed
      until the initialization really finished.  Otherwise, vga-switcheroo
      client would start switching before the actual init is done.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      88d071fc
    • Takashi Iwai's avatar
      ALSA: hda - Fix bad EAPD setup for HP machines with AD1984A · 1cd9b2f7
      Takashi Iwai authored
      It seems that EAPD on NID 0x16 is the only control over all outputs on
      HP machines with AD1984A while turning EAPD on NID 0x12 breaks the
      output.  Thus we need to avoid fiddling EAPD on NID.  As a quick
      workaround, just set own_eapd_ctrl flag for the wrong EAPD, then
      implement finer EAPD controls.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=66321
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      1cd9b2f7
    • Shawn Guo's avatar
      ASoC: core: fix devres parameter in devm_snd_soc_register_card() · ebff6547
      Shawn Guo authored
      Since devm_card_release() expects parameter 'res' to be a pointer to
      struct snd_soc_card, devm_snd_soc_register_card() should really pass
      such a pointer rather than the one to struct device.
      
      This bug causes the kernel Oops below with imx-sgtl500 driver when we
      remove the module.  It happens because with 'card' pointing to the wrong
      structure, card->num_rtd becomes 0 in function soc_remove_dai_links().
      Consequently, soc_remove_link_components() and in turn
      soc_cleanup_codec[platform]_debugfs() will not be called on card
      removal.  It results in that debugfs_card_root is being removed while
      its child entries debugfs_codec_root and debugfs_platform_root are still
      there, and thus the kernel Oops.
      
      Fix the bug by correcting the parameter 'res' to be the pointer to
      struct snd_soc_card.
      
      $ lsmod
      Module                  Size  Used by
      snd_soc_imx_sgtl5000     3506  0
      snd_soc_sgtl5000       13677  2
      snd_soc_imx_audmux      5324  1 snd_soc_imx_sgtl5000
      snd_soc_fsl_ssi         8139  2
      imx_pcm_dma             1380  1 snd_soc_fsl_ssi
      $ rmmod snd_soc_imx_sgtl5000
      Unable to handle kernel paging request at virtual address e594025c
      pgd = be134000
      [e594025c] *pgd=00000000
      Internal error: Oops: 5 [#1] SMP ARM
      Modules linked in: snd_soc_imx_sgtl5000(-) snd_soc_sgtl5000 snd_soc_imx_audmux snd_soc_fsl_ssi imx_pcm_dma
      CPU: 0 PID: 1793 Comm: rmmod Not tainted 3.13.0-rc1 #1570
      task: bee28900 ti: bfbec000 task.ti: bfbec000
      PC is at debugfs_remove_recursive+0x28/0x154
      LR is at snd_soc_unregister_card+0xa0/0xcc
      pc : [<80252b38>]    lr : [<80496ac4>]    psr: a0000013
      sp : bfbede00  ip : bfbede28  fp : bfbede24
      r10: 803281d4  r9 : bfbec000  r8 : 803271ac
      r7 : bef54440  r6 : 00000004  r5 : bf9a4010  r4 : bf9a4010
      r3 : e5940224  r2 : 00000000  r1 : bef54450  r0 : 803271ac
      Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
      Control: 10c53c7d  Table: 4e13404a  DAC: 00000015
      Process rmmod (pid: 1793, stack limit = 0xbfbec240)
      Stack: (0xbfbede00 to 0xbfbee000)
      de00: 00000000 bf9a4010 bf9a4010 00000004 bef54440 bec89000 bfbede44 bfbede28
      de20: 80496ac4 80252b1c 804a4b60 bfbede60 bf9a4010 00000004 bfbede54 bfbede48
      de40: 804a4b74 80496a30 bfbede94 bfbede58 80328728 804a4b6c bfbede94 a0000013
      de60: bf1b5800 bef54440 00000002 bf9a4010 7f0169f8 bf9a4044 00000081 8000e9c4
      de80: bfbec000 00000000 bfbedeac bfbede98 80328cb0 80328618 7f016000 bf9a4010
      dea0: bfbedec4 bfbedeb0 8032561c 80328c84 bf9a4010 7f0169f8 bfbedee4 bfbedec8
      dec0: 80325e84 803255a8 bee28900 7f0169f8 00000000 78208d30 bfbedefc bfbedee8
      dee0: 80325410 80325dd4 beca8100 7f0169f8 bfbedf14 bfbedf00 803264f8 803253c8
      df00: 7f01635c 7f016a3c bfbedf24 bfbedf18 80327098 803264d4 bfbedf34 bfbedf28
      df20: 7f016370 80327090 bfbedfa4 bfbedf38 80085ef0 7f016368 bfbedf54 5f646e73
      df40: 5f636f73 5f786d69 6c746773 30303035 00000000 78208008 bfbedf84 bfbedf68
      df60: 800613b0 80061194 fffffffe 78208d00 7efc2f07 00000081 7f016a3c 00000800
      df80: bfbedf84 00000000 00000000 fffffffe 78208d00 7efc2f07 00000000 bfbedfa8
      dfa0: 8000e800 80085dcc fffffffe 78208d00 78208d30 00000800 a8c82400 a8c82400
      dfc0: fffffffe 78208d00 7efc2f07 00000081 00000002 00000000 78208008 00000800
      dfe0: 7efc2e1c 7efc2ba8 76f5ca47 76edec7c 80000010 78208d30 00000000 00000000
      Backtrace:
      [<80252b10>] (debugfs_remove_recursive+0x0/0x154) from [<80496ac4>] (snd_soc_unregister_card+0xa0/0xcc)
       r8:bec89000 r7:bef54440 r6:00000004 r5:bf9a4010 r4:bf9a4010
      r3:00000000
      [<80496a24>] (snd_soc_unregister_card+0x0/0xcc) from [<804a4b74>] (devm_card_release+0x14/0x18)
       r6:00000004 r5:bf9a4010 r4:bfbede60 r3:804a4b60
      [<804a4b60>] (devm_card_release+0x0/0x18) from [<80328728>] (release_nodes+0x11c/0x1dc)
      [<8032860c>] (release_nodes+0x0/0x1dc) from [<80328cb0>] (devres_release_all+0x38/0x54)
      [<80328c78>] (devres_release_all+0x0/0x54) from [<8032561c>] (__device_release_driver+0x80/0xd4)
       r4:bf9a4010 r3:7f016000
      [<8032559c>] (__device_release_driver+0x0/0xd4) from [<80325e84>] (driver_detach+0xbc/0xc0)
       r5:7f0169f8 r4:bf9a4010
      [<80325dc8>] (driver_detach+0x0/0xc0) from [<80325410>] (bus_remove_driver+0x54/0x98)
       r6:78208d30 r5:00000000 r4:7f0169f8 r3:bee28900
      [<803253bc>] (bus_remove_driver+0x0/0x98) from [<803264f8>] (driver_unregister+0x30/0x50)
       r4:7f0169f8 r3:beca8100
      [<803264c8>] (driver_unregister+0x0/0x50) from [<80327098>] (platform_driver_unregister+0x14/0x18)
       r4:7f016a3c r3:7f01635c
      [<80327084>] (platform_driver_unregister+0x0/0x18) from [<7f016370>] (imx_sgtl5000_driver_exit+0x14/0x1c [snd_soc_imx_sgtl5000])
      [<7f01635c>] (imx_sgtl5000_driver_exit+0x0/0x1c [snd_soc_imx_sgtl5000]) from [<80085ef0>] (SyS_delete_module+0x130/0x18c)
      [<80085dc0>] (SyS_delete_module+0x0/0x18c) from [<8000e800>] (ret_fast_syscall+0x0/0x48)
       r6:7efc2f07 r5:78208d00 r4:fffffffe
      Code: 889da9f8 e5983020 e3530000 089da9f8 (e5933038)
      ---[ end trace 825e7e125251a225 ]---
      Signed-off-by: default avatarShawn Guo <shawn.guo@linaro.org>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      ebff6547
    • Jarkko Nikula's avatar
      ASoC: omap: n810: Convert to clk_prepare_enable/clk_disable_unprepare · fb28a75a
      Jarkko Nikula authored
      N810 audio driver has stopped working at some point. Probably when
      OMAP2 was converted to common clock framework since now call to clk_enable
      dumps the stack trace in drivers/clk/clk.c: __clk_enable() due
      clk->prepare_count is zero.
      
      Fix this by converting clk_enable/_disable calls to those that take care
      of clock prepare/unprepare.
      
      I'm not queueing this to linux-stable since OMAP2 common clock framework
      conversion in commit ed1ebc49 ("ARM: OMAP2: clock: Convert to common clk")
      happened before N810 was really usable in mainline and user base for N810 is
      anyway small. Potential linux-stable candidates are only those after
      commit 3d3a6d18 ("watchdog: introduce retu_wdt driver").
      Signed-off-by: default avatarJarkko Nikula <jarkko.nikula@bitmer.com>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      fb28a75a
    • Wei Yongjun's avatar
      ASoC: fsl: set correct platform drvdata in pcm030_fabric_probe() · 6c7ef410
      Wei Yongjun authored
      platform_set_drvdata(op, pdata) in pcm030_fabric_probe()
      will be overwrited when calling snd_soc_register_card(card),
      but cm030_fabric_remove() use drvdata as a type of struct
      pcm030_audio_data, so we should move platform_set_drvdata()
      below snd_soc_register_card() call.
      Signed-off-by: default avatarWei Yongjun <yongjun_wei@trendmicro.com.cn>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      6c7ef410
    • Fabio Estevam's avatar
      ASoC: fsl: imx-pcm-fiq: Remove unused 'runtime' variable · 23d8bb3b
      Fabio Estevam authored
      Commit 68f9672b (ASoC: fsl: imx-pcm-fiq: remove bogus period delta calculation)
      introduced the following build warning:
      
      sound/soc/fsl/imx-pcm-fiq.c:53:26: warning: unused variable 'runtime' [-Wunused-variable]
      
      Remove the unused 'runtime' variable.
      Signed-off-by: default avatarFabio Estevam <fabio.estevam@freescale.com>
      Acked-by: default avatarOskar Schirmer <oskar@scara.com>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      23d8bb3b
    • Oskar Schirmer's avatar
      ASoC: fsl: imx-pcm-fiq: remove bogus period delta calculation · d6437c14
      Oskar Schirmer authored
      Originally snd_hrtimer_callback() used iprtd->period_time for
      some jiffies based estimation to determine the right moment
      to call snd_pcm_period_elapsed(). As timer drifts may well be a
      problem, this was changed in commit b4e82b5b to be based
      on buffer transmission progress, using iprtd->offset and
      runtime->buffer_size to calculate the amount of data since last
      period had elapsed.
      
      Unfortunately, iprtd->offset counts in bytes, while
      runtime->buffer_size counts frames, so adding these to find some
      delta is like comparing apples and oranges, and eventually results
      in negative delta values every now and then. This is no big harm,
      because it simply causes snd_pcm_period_elapsed() being called
      more often than necessary, as negative delta is taken for a
      large unsigned value by implicit conversion rule.
      Nonetheless, the calculation is broken, so one would replace
      the runtime->buffer_size by its equivalent in bytes.
      
      But then, there are chances snd_pcm_period_elapsed() is called
      late, because calculating the moment for the elapsed period
      into delta is based against the iprtd->last_offset, which is not
      necessarily the first byte of the period in question, but some
      random byte which the FIQ handler left us with in r8/r9 by
      accident. Again, negative impact is low, as there are plenty of
      periods already prefilled with data, and snd_pcm_period_elapsed()
      will probably be called latest when the following period is
      reached. However, the calculation is conceptually broken, and we
      are best off removing the clever stuff altogether.
      
      snd_pcm_period_elapsed() is now simply called once everytime
      snd_hrtimer_callback() is run, which may not be most accurate,
      but at least this way we are quite sure we dont miss an end of
      period. There is not much extra effort wasted by superfluous
      calls to snd_pcm_period_elapsed(), as the timer frequency
      closely matches the period size anyway.
      Signed-off-by: default avatarOskar Schirmer <oskar@scara.com>
      Signed-off-by: default avatarMark Brown <broonie@linaro.org>
      d6437c14
  4. 29 Nov, 2013 17 commits
  5. 28 Nov, 2013 2 commits