1. 08 8月, 2019 2 次提交
    • T
      ALSA: hda: Direct MMIO accesses · 19abfefd
      Takashi Iwai 提交于
      HD-audio drivers access to the mmio registers indirectly via the
      corresponding bus->io_ops callbacks.  This is because some platform
      (notably Tegra SoC) requires the word-aligned access.  But it's rather
      a rare case, and other platforms suffer from the penalties by indirect
      calls unnecessarily.
      
      This patch is an attempt to optimize and cleanup for this situation.
      Now the special aligned access is used only when a new kconfig
      CONFIG_SND_HDA_ALIGNED_MMIO is set.  And the HD-audio core itself
      provides the aligned MMIO access helpers instead of the driver side.
      If Kconfig isn't set (as default), the standard helpers like readl()
      or writel() are used directly.
      
      A couple of places in ASoC Intel drivers have the access via io_ops
      reg_writel(), and they are replaced with the direct writel() calls.
      
      And now with this patch, the whole bus->io_ops becomes empty, so it's
      dropped completely.  The bus initialization functions are changed
      accordingly as well to drop the whole bus->io_ops.
      Reviewed-by: NPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      19abfefd
    • T
      ALSA: hda: Remove page allocation redirection · 619a1f19
      Takashi Iwai 提交于
      The HD-audio core allocates and releases pages via driver's specific
      dma_alloc_pages and dma_free_pages ops defined in bus->io_ops.  This
      was because some platforms require the uncached pages and the handling
      of page flags had to be done locally in the driver code.
      
      Since the recent change in ALSA core memory allocator, we can simply
      pass SNDRV_DMA_TYPE_DEV_UC for the uncached pages, and the only
      difference became about this type to be passed to the core allocator.
      That is, it's good time for cleaning up the mess.
      
      This patch changes the allocation code in HD-audio core to call the
      core allocator directly so that we get rid of dma_alloc_pages and
      dma_free_pages io_ops.  If a driver needs the uncached pages, it has
      to set bus->dma_type right after the bus initialization.
      
      This is merely a code refactoring and shouldn't bring any behavior
      changes.
      Reviewed-by: NPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      619a1f19
  2. 31 5月, 2019 1 次提交
  3. 13 3月, 2019 1 次提交
    • A
      ALSA: hda/tegra: avoid build error without CONFIG_PM · 74729469
      Arnd Bergmann 提交于
      The #ifdef protection around the PM functions is wrong, leading to
      a failed reference in some configurations:
      
      sound/pci/hda/hda_tegra.c: In function 'hda_tegra_runtime_suspend':
      sound/pci/hda/hda_tegra.c:273:2: error: implicit declaration of function 'hda_tegra_disable_clocks'; did you mean 'hda_tegra_enable_clocks'? [-Werror=implicit-function-declaration]
      
      Better remove the #ifdefs entirely and rely on the compiler silently
      dropping unused functions marked __maybe_unused.
      
      Fixes: 707e0759 ("ALSA: hda/tegra: implement runtime suspend/resume")
      Acked-by: NThierry Reding <treding@nvidia.com>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      74729469
  4. 22 2月, 2019 1 次提交
    • S
      ALSA: hda/tegra: sound card name from device tree · c0bde003
      Sameer Pujar 提交于
      A platform can have multiple sound cards for different audio paths.
      Following is the print seen duirng device boot for jetson-xavier,
        ALSA device list:
          #0: nvidia,p2972-0000 at 0x3518000 irq 17
      By looking at above, it is not very clear if the sound card is for
      HDA. It becomes confusing when platform has registered multiple cards,
      and platform model name is used for card.
      
      This patch uses "nvidia,model" property mentioned in hda device tree
      to get the card name. Since property is optional, legacy boards will
      continue to use "tegra-hda". Custom name can be passed wherever needed.
      This naming convention is conistent with the way sound cards are named
      in general.
      Signed-off-by: NSameer Pujar <spujar@nvidia.com>
      Reviewed-by: NJonathan Hunter <jonathanh@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      c0bde003
  5. 22 1月, 2019 6 次提交
  6. 01 1月, 2019 1 次提交
  7. 03 12月, 2018 1 次提交
  8. 29 11月, 2018 1 次提交
    • S
      ALSA: hda/tegra: compatible string as shortname · c94800a3
      Sameer Pujar 提交于
      By default HDA sound card is registered with shortname "tegra-hda".
      Same driver is used across tegra platforms and it is necessary to
      distinguish between platforms to use platform specific settings from
      userspace. One such example is, hdmi port on different platforms use
      different alsa pcm device ID. For hdmi playback to work it should
      open correct pcm device depending on the platform.
      
      This patch applies shortname from first compatible string provided
      in root node of device tree. Userspace then can use this card name
      to apply specific settings.
      Signed-off-by: NSameer Pujar <spujar@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      c94800a3
  9. 30 8月, 2018 1 次提交
  10. 29 8月, 2018 1 次提交
  11. 28 8月, 2018 1 次提交
    • T
      ALSA: hda: Remove substream allocation/free ops · 193c7e14
      Takashi Iwai 提交于
      Since we dropped the memory page fiddling in the own allocators in
      hda_intel.c, the substream allocation and free ops in both hda_intel.c
      and hda_tegra.c became nothing but the simple calls of the standard
      snd_pcm_lib helpers.  As both are identical, there is no longer need
      for indirect calls via ops; it's a good opportunity for removing ops
      and simplifying the codes.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      193c7e14
  12. 22 6月, 2016 1 次提交
    • B
      ALSA: hda/tegra: iomem fixups for sparse warnings · c9058d43
      Ben Dooks 提交于
      The readl/writel are not being passed __iomem annotated
      variables, so fix the following sparse warnings by adding
      __iomem in:
      
      sound/pci/hda/hda_tegra.c:120:9: warning: incorrect type in argument 2 (different address spaces)
      sound/pci/hda/hda_tegra.c:120:9:    expected void volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:120:9:    got unsigned int [usertype] *addr
      sound/pci/hda/hda_tegra.c:125:16: warning: incorrect type in argument 1 (different address spaces)
      sound/pci/hda/hda_tegra.c:125:16:    expected void const volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:125:16:    got unsigned int [usertype] *addr
      sound/pci/hda/hda_tegra.c:134:13: warning: incorrect type in argument 1 (different address spaces)
      sound/pci/hda/hda_tegra.c:134:13:    expected void const volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:134:13:    got void *dword_addr
      sound/pci/hda/hda_tegra.c:137:9: warning: incorrect type in argument 2 (different address spaces)
      sound/pci/hda/hda_tegra.c:137:9:    expected void volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:137:9:    got void *dword_addr
      sound/pci/hda/hda_tegra.c:146:13: warning: incorrect type in argument 1 (different address spaces)
      sound/pci/hda/hda_tegra.c:146:13:    expected void const volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:146:13:    got void *dword_addr
      sound/pci/hda/hda_tegra.c:156:13: warning: incorrect type in argument 1 (different address spaces)
      sound/pci/hda/hda_tegra.c:156:13:    expected void const volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:156:13:    got void *dword_addr
      sound/pci/hda/hda_tegra.c:159:9: warning: incorrect type in argument 2 (different address spaces)
      sound/pci/hda/hda_tegra.c:159:9:    expected void volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:159:9:    got void *dword_addr
      sound/pci/hda/hda_tegra.c:168:13: warning: incorrect type in argument 1 (different address spaces)
      sound/pci/hda/hda_tegra.c:168:13:    expected void const volatile [noderef] <asn:2>*addr
      sound/pci/hda/hda_tegra.c:168:13:    got void *dword_addr
      sound/pci/hda/hda_tegra.c:173:23: warning: incorrect type in initializer (incompatible argument 2 (different address spaces))
      sound/pci/hda/hda_tegra.c:173:23:    expected void ( *reg_writel )( ... )
      sound/pci/hda/hda_tegra.c:173:23:    got void ( static [toplevel] *<noident> )( ... )
      sound/pci/hda/hda_tegra.c:174:22: warning: incorrect type in initializer (incompatible argument 1 (different address spaces))
      sound/pci/hda/hda_tegra.c:174:22:    expected unsigned int ( *reg_readl )( ... )
      sound/pci/hda/hda_tegra.c:174:22:    got unsigned int ( static [toplevel] *<noident> )( ... )
      sound/pci/hda/hda_tegra.c:175:23: warning: incorrect type in initializer (incompatible argument 2 (different address spaces))
      sound/pci/hda/hda_tegra.c:175:23:    expected void ( *reg_writew )( ... )
      sound/pci/hda/hda_tegra.c:175:23:    got void ( static [toplevel] *<noident> )( ... )
      sound/pci/hda/hda_tegra.c:176:22: warning: incorrect type in initializer (incompatible argument 1 (different address spaces))
      sound/pci/hda/hda_tegra.c:176:22:    expected unsigned short ( *reg_readw )( ... )
      sound/pci/hda/hda_tegra.c:176:22:    got unsigned short ( static [toplevel] *<noident> )( ... )
      sound/pci/hda/hda_tegra.c:177:23: warning: incorrect type in initializer (incompatible argument 2 (different address spaces))
      sound/pci/hda/hda_tegra.c:177:23:    expected void ( *reg_writeb )( ... )
      sound/pci/hda/hda_tegra.c:177:23:    got void ( static [toplevel] *<noident> )( ... )
      sound/pci/hda/hda_tegra.c:178:22: warning: incorrect type in initializer (incompatible argument 1 (different address spaces))
      sound/pci/hda/hda_tegra.c:178:22:    expected unsigned char ( *reg_readb )( ... )
      sound/pci/hda/hda_tegra.c:178:22:    got unsigned char ( static [toplevel] *<noident> )( ... )
      Signed-off-by: NBen Dooks <ben.dooks@codethink.co.uk>
      Acked-by: NThierry Reding <treding@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      c9058d43
  13. 17 12月, 2015 1 次提交
  14. 24 9月, 2015 1 次提交
  15. 18 5月, 2015 2 次提交
  16. 05 5月, 2015 1 次提交
    • T
      ALSA: hda/tegra - Fix oops · 3b90f407
      Thierry Reding 提交于
      Commit a41d1224 ("ALSA: hda - Embed bus into controller object")
      introduced a regression in the Tegra HDA driver that causes the
      following oops during boot:
      
      	[    2.333458] Unable to handle kernel NULL pointer dereference at virtual address 000004c4
      	[    2.341537] pgd = c0004000
      	[    2.344312] [000004c4] *pgd=00000000
      	[    2.347898] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
      	[    2.353200] Modules linked in:
      	[    2.356264] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G        W       4.1.0-rc2-next-20150505-00344-g8577890defbf #79
      	[    2.366682] Hardware name: NVIDIA Tegra SoC (Flattened Device Tree)
      	[    2.372939] task: ee0d8b40 ti: ee0da000 task.ti: ee0da000
      	[    2.378336] PC is at azx_bus_init+0x18/0xf4
      	[    2.382516] LR is at hda_tegra_probe+0x6c/0x478
      	[    2.387043] pc : [<c06156c4>]    lr : [<c061cf00>]    psr: 60000113
      	[    2.387043] sp : ee0dbe38  ip : 00000000  fp : 00000000
      	[    2.398501] r10: ed874c00  r9 : 000000fd  r8 : 00000000
      	[    2.403717] r7 : ed874c10  r6 : 00000000  r5 : 00000000  r4 : ed016810
      	[    2.410232] r3 : c08a2ad4  r2 : c08a1ea0  r1 : 00000000  r0 : ed016810
      	[    2.416750] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
      	[    2.424046] Control: 10c5387d  Table: 8000406a  DAC: 00000015
      	[    2.429783] Process swapper/0 (pid: 1, stack limit = 0xee0da210)
      	[    2.435778] Stack: (0xee0dbe38 to 0xee0dc000)
      	[    2.440129] be20:                                                       00000000 ed016810
      	[    2.448297] be40: 00000000 c061cf00 00000000 ee0dbe5c ed8735d0 c0a7bc48 ed02fd50 ed016000
      	[    2.456462] be60: c1250164 ed874c10 c0c66bf8 fffffdfb 00000000 000000fd c0b8dc98 c046664c
      	[    2.464628] be80: c0466608 c1250164 ed874c10 00000000 c0c66bf8 c0464eb4 ed874c10 c0c66bf8
      	[    2.472793] bea0: ed874c44 c0c43458 00000000 c04650d0 00000000 c0c66bf8 c046503c c04633b4
      	[    2.480959] bec0: ee11bea4 ed85f390 c0c66bf8 ed017ac0 00000000 c0464634 c0ab2b7c c0c66bf8
      	[    2.489125] bee0: c0bfde20 c0c66bf8 c0bfde20 ed01ce40 c0b7b414 c04656e8 c04665b0 c0bfde20
      	[    2.497291] bf00: c0bfde20 c0009770 ee0d8b40 c0c02488 60000113 00000000 00000000 00000003
      	[    2.505458] bf20: 00000000 c0c02488 60000113 00000000 c0b54598 c0b16a90 ef7fcc57 c0041228
      	[    2.513624] bf40: c0a9150c ef7fcc5f 00000006 00000006 00000000 c0bf1fa8 c0bf2354 00000006
      	[    2.521790] bf60: c0b8dc90 c0c7c000 c0c7c000 c0b8dc98 00000000 c0b54dd8 00000006 00000006
      	[    2.529956] bf80: c0b54598 00000000 00000000 c07ff08c 00000000 00000000 00000000 00000000
      	[    2.538122] bfa0: 00000000 c07ff094 00000000 c000f5a0 00000000 00000000 00000000 00000000
      	[    2.546286] bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      	[    2.554451] bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 fffff7ff c013f264
      	[    2.562624] [<c06156c4>] (azx_bus_init) from [<c061cf00>] (hda_tegra_probe+0x6c/0x478)
      	[    2.570535] [<c061cf00>] (hda_tegra_probe) from [<c046664c>] (platform_drv_probe+0x44/0xa4)
      	[    2.578879] [<c046664c>] (platform_drv_probe) from [<c0464eb4>] (driver_probe_device+0x174/0x2b8)
      	[    2.587739] [<c0464eb4>] (driver_probe_device) from [<c04650d0>] (__driver_attach+0x94/0x98)
      	[    2.596172] [<c04650d0>] (__driver_attach) from [<c04633b4>] (bus_for_each_dev+0x6c/0xa0)
      	[    2.604342] [<c04633b4>] (bus_for_each_dev) from [<c0464634>] (bus_add_driver+0x148/0x1f0)
      	[    2.612597] [<c0464634>] (bus_add_driver) from [<c04656e8>] (driver_register+0x78/0xf8)
      	[    2.620593] [<c04656e8>] (driver_register) from [<c0009770>] (do_one_initcall+0x8c/0x1d4)
      	[    2.628765] [<c0009770>] (do_one_initcall) from [<c0b54dd8>] (kernel_init_freeable+0x144/0x1e4)
      	[    2.637459] [<c0b54dd8>] (kernel_init_freeable) from [<c07ff094>] (kernel_init+0x8/0xe8)
      	[    2.645543] [<c07ff094>] (kernel_init) from [<c000f5a0>] (ret_from_fork+0x14/0x34)
      
      This is caused by azx_bus_init() trying to dereference chip->card, which
      for the Tegra driver doesn't get initialized until sometime later during
      the call to hda_tegra_create().
      
      Fix this by mimicking the behaviour of the Intel driver and defer HDA
      bus initialization until right before the call to snd_device_new().
      
      Fixes: a41d1224 ('ALSA: hda - Embed bus into controller object')
      Signed-off-by: NThierry Reding <treding@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      3b90f407
  17. 16 4月, 2015 6 次提交
  18. 13 3月, 2015 1 次提交
  19. 03 3月, 2015 1 次提交
    • T
      ALSA: hda - Build PCMs and controls at codec driver probe · bcd96557
      Takashi Iwai 提交于
      This makes the code flow easier -- instead of the controller driver
      calling snd_hda_build_pcms() and snd_hda_build_controls() explicitly,
      the codec driver itself builds PCMs and controls at probe time.  Then
      the controller driver only needs to call snd_card_register().
      
      Also, this allows us the full bind/unbind control, too.  Even when a
      codec driver is bound later, it automatically registers the new PCM
      and controls by itself.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      bcd96557
  20. 26 2月, 2015 2 次提交
    • T
      ALSA: hda - Power down codec automatically at registration · 709949fb
      Takashi Iwai 提交于
      So far, we let the controller driver power down the all codecs at the
      end of probe.  But this can be done better in the codec's dev_register
      callback.  This results in the reduction of duplicated codes in each
      control driver.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      709949fb
    • T
      ALSA: hda - Drop power_save value indirection in hda_bus · bb573928
      Takashi Iwai 提交于
      We used to pass the power_save option value to hda_bus via a given
      pointer.  This was needed to refer to the value from the HD-audio core
      side.  However, after the transition to the runtime PM, this is no
      longer needed.
      
      This patch drops the power_save value indirection in hda_bus above,
      and let the controller driver reprograms the autosuspend value
      explicitly by a new helper, snd_hda_set_power_save().  Without this
      call, the HD-audio core doesn't set up the autosuspend and flip the
      runtime PM.  (User may still be able to set up via sysfs, though.)
      
      Along with this change, the pointer argument of azx_bus_create() is
      dropped as well.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      bb573928
  21. 23 2月, 2015 1 次提交
    • T
      ALSA: hda - Move codec suspend/resume to codec driver · 59ed1ead
      Takashi Iwai 提交于
      This patch moves the suspend/resume mechanisms down to each codec
      driver level, as we have a proper codec driver bound on the bus now.
      Then we get the asynchronous PM gratis without fiddling much in the
      driver level.
      
      As a soft-landing transition, implement the common suspend/resume pm
      ops for hda_codec_driver and keep the each codec driver intact.  Only
      the callers of suspend/resume in the controller side (azx_suspend()
      and azx_resume()) are removed.
      
      Another involved place is azx_bus_reset() calling the temporary
      suspend and resume as a hackish method of bus reset.  The HD-audio
      core provide a helper function snd_hda_bus_reset() instead.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      59ed1ead
  22. 20 2月, 2015 3 次提交
  23. 14 2月, 2015 1 次提交
  24. 07 7月, 2014 1 次提交
    • T
      ALSA: hda: Fix build warning · 525549d7
      Thierry Reding 提交于
      The hda_tegra_disable_clocks() function is only used by the suspend and
      resume code, so it needs to be included in the #ifdef CONFIG_PM_SLEEP
      block to prevent the following warning:
      
        CC      sound/pci/hda/hda_tegra.o
      sound/pci/hda/hda_tegra.c:238:13: warning: 'hda_tegra_disable_clocks' defined but not used [-Wunused-function]
       static void hda_tegra_disable_clocks(struct hda_tegra *data)
                   ^
      Signed-off-by: NThierry Reding <treding@nvidia.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      525549d7
  25. 01 7月, 2014 1 次提交