1. 30 6月, 2016 1 次提交
    • A
      ASoC: fsl_ssi: Fix number of words per frame for I2S-slave mode · 4f14f5c1
      Alexander Shiyan 提交于
      The i.MX51 datasheet says:
      Chapter 56.1.2.4 I2S Mode
      ...
      When I2S modes are entered (I2S master (01) or I2S slave (10)),
      the following settings are recommended:
      ...
      - TX Frame Rate should be 2 i.e. (STCCR[12:8] = 1)
      - RX Frame Rate should be 2 i.e. (SRCCR[12:8] = 1)
      
      Chapter 56.3.3.12 SSI Transmit and Receive Clock Control Registers (STCCR & SRCCR)
      ...
      Bits 12-8 DC4-DC0
      Frame Rate Divider Control. These bits are used to control the divide ratio
      for the programmable frame rate dividers. The divide ratio works on the word
      clock. In Normal mode, this ratio determines the word transfer rate.
      In Network mode, this ratio sets the number of words per frame. The divide
      ratio ranges from 1 to 32 in Normal mode and from 2 to 32 in Network mode.
      In Normal mode, a divide ratio of 1 (DC=00000) provides continuous periodic
      data word transfer. A bit-length frame sync must be used in this case.
      
      Function fsl_ssi_hw_params() setup Normal mode for MONO output,
      so with DC=0, SSI enters to continuous periodic data word transfer.
      To fix this, setup DC for any I2S mode.
      Patch has tested on custom board based on Digi CCMX-51 module (i.MX51).
      Signed-off-by: NAlexander Shiyan <shc_work@mail.ru>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      4f14f5c1
  2. 13 5月, 2016 6 次提交
  3. 29 4月, 2016 1 次提交
  4. 22 2月, 2016 2 次提交
  5. 25 1月, 2016 1 次提交
  6. 10 1月, 2016 2 次提交
  7. 25 11月, 2015 1 次提交
  8. 16 11月, 2015 1 次提交
  9. 06 10月, 2015 1 次提交
  10. 20 9月, 2015 1 次提交
  11. 15 8月, 2015 6 次提交
  12. 12 8月, 2015 1 次提交
  13. 07 7月, 2015 2 次提交
  14. 08 5月, 2015 1 次提交
  15. 17 4月, 2015 1 次提交
  16. 10 4月, 2015 2 次提交
  17. 05 3月, 2015 2 次提交
  18. 11 2月, 2015 1 次提交
  19. 15 1月, 2015 2 次提交
  20. 09 1月, 2015 2 次提交
  21. 05 12月, 2014 2 次提交
    • J
      ASoC: fsl_ssi: fix error path in probe · 4c9a8845
      Jiada Wang 提交于
      SSI component isn't unregistered if fsl_ssi_debugfs_create() fails
      in probe phase.
      
      To fix it, this commit replaces label error_asoc_register with
      error_irq.
      Signed-off-by: NJiada Wang <jiada_wang@mentor.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      4c9a8845
    • F
      ASoC: fsl_ssi: Fix module unbound · 2ffa5310
      Fabio Estevam 提交于
      Trying to remove the snd-soc-fsl-ssi module leads to the following warning:
      
      [   31.515336] ------------[ cut here ]------------
      [   31.520091] WARNING: CPU: 2 PID: 434 at fs/proc/generic.c:521 remove_proc_entry+0x14c/0x16c()
      [   31.528708] remove_proc_entry: removing non-empty directory 'irq/79', leaking at least '202c000.ss'
      [   31.537911] Modules linked in: snd_soc_wm8962 snd_soc_imx_wm8962 snd_soc_fsl_ssi(-) evbug
      [   31.546249] CPU: 2 PID: 434 Comm: rmmod Not tainted 3.18.0-rc6-00028-g3314bf6b-dirty #1
      [   31.554235] Backtrace:
      [   31.556816] [<80011ea8>] (dump_backtrace) from [<80012044>] (show_stack+0x18/0x1c)
      [   31.564416]  r6:80142c88 r5:00000000 r4:00000000 r3:00000000
      [   31.570267] [<8001202c>] (show_stack) from [<806980ec>] (dump_stack+0x88/0xa4)
      [   31.577588] [<80698064>] (dump_stack) from [<80029d78>] (warn_slowpath_common+0x70/0x94)
      [   31.585711]  r5:00000009 r4:bb61fd90
      [   31.589423] [<80029d08>] (warn_slowpath_common) from [<80029e40>] (warn_slowpath_fmt+0x38/0x40)
      [   31.598187]  r8:bb61fdfe r7:be05d76d r6:be05d9a8 r5:00000002 r4:be05d700
      [   31.605054] [<80029e0c>] (warn_slowpath_fmt) from [<80142c88>] (remove_proc_entry+0x14c/0x16c)
      [   31.613709]  r3:806a79c0 r2:808229a0
      [   31.617371] [<80142b3c>] (remove_proc_entry) from [<80070380>] (unregister_irq_proc+0x94/0xb8)
      [   31.625989]  r10:00000000 r8:8000ede4 r7:80955f2c r6:0000004f r5:8118e738 r4:be00af00
      [   31.633952] [<800702ec>] (unregister_irq_proc) from [<80069dac>] (free_desc+0x2c/0x64)
      [   31.641898]  r6:0000004f r5:80955f38 r4:be00af00
      [   31.646604] [<80069d80>] (free_desc) from [<80069e68>] (irq_free_descs+0x4c/0x8c)
      [   31.654092]  r7:00000081 r6:00000001 r5:0000004f r4:00000001
      [   31.659863] [<80069e1c>] (irq_free_descs) from [<8006fc3c>] (irq_dispose_mapping+0x40/0x5c)
      [   31.668247]  r6:be17b844 r5:be17b800 r4:0000004f r3:802c5ec0
      [   31.673998] [<8006fbfc>] (irq_dispose_mapping) from [<7f004ea4>] (fsl_ssi_remove+0x58/0x70 [snd_so)
      [   31.683948]  r4:bb5bba10 r3:00000001
      [   31.687618] [<7f004e4c>] (fsl_ssi_remove [snd_soc_fsl_ssi]) from [<803720a0>] (platform_drv_remove)
      [   31.697564]  r5:7f0064f8 r4:be17b810
      [   31.701195] [<80372080>] (platform_drv_remove) from [<80370494>] (__device_release_driver+0x78/0xc)
      [   31.710361]  r5:7f0064f8 r4:be17b810
      [   31.713987] [<8037041c>] (__device_release_driver) from [<80370d20>] (driver_detach+0xbc/0xc0)
      [   31.722631]  r5:7f0064f8 r4:be17b810
      [   31.726259] [<80370c64>] (driver_detach) from [<80370304>] (bus_remove_driver+0x54/0x98)
      [   31.734382]  r6:00000800 r5:00000000 r4:7f0064f8 r3:bb67f500
      [   31.740149] [<803702b0>] (bus_remove_driver) from [<80371398>] (driver_unregister+0x30/0x50)
      [   31.748617]  r4:7f0064f8 r3:bd9f7080
      [   31.752245] [<80371368>] (driver_unregister) from [<80371f3c>] (platform_driver_unregister+0x14/0x)
      [   31.761498]  r4:7f00655c r3:7f005a70
      [   31.765130] [<80371f28>] (platform_driver_unregister) from [<7f005a84>] (fsl_ssi_driver_exit+0x14/)
      [   31.776147] [<7f005a70>] (fsl_ssi_driver_exit [snd_soc_fsl_ssi]) from [<8008ed80>] (SyS_delete_mod)
      [   31.786553] [<8008ec64>] (SyS_delete_module) from [<8000ec20>] (ret_fast_syscall+0x0/0x48)
      [   31.794824]  r6:00c46d18 r5:00000800 r4:00c46d18
      [   31.799530] ---[ end trace 954e8a3a15379e52 ]---
      
      The cause of problem and solution are well explained by Lars-Peter:
      
      "The driver creates the mapping by calling irq_of_parse_and_map(), so it also
      has to dispose the mapping. But the easy way out is to simply use
      platform_get_irq() instead of irq_of_parse_map(). In this case the mapping is
      not managed by the device but by the of core, so the device has not to dispose
      the mapping."
      
      Tested on a imx6q-sabresd board.
      Reported-by: NJiada Wang <jiada_wang@mentor.com>
      Suggested-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      2ffa5310
  22. 18 11月, 2014 1 次提交
    • L
      ASoC: Rename snd_soc_dai_driver struct ac97_control field to bus_control · bc263214
      Lars-Peter Clausen 提交于
      Setting the ac97_control field on a CPU DAI tells the ASoC core that this
      DAI in addition to audio data also transports control data to the CODEC.
      This causes the core to suspend the DAI after the CODEC and resume it before
      the CODEC so communication to the CODEC is still possible. This is not
      necessarily something that is specific to AC'97 and can be used by other
      buses with the same requirement. This patch renames the flag from
      ac97_control to bus_control to make this explicit.
      
      While we are at it also change the type from int to bool.
      
      The following semantich patch was used for automatic conversion of the
      drivers:
      // <smpl>
      @@
      identifier drv;
      @@
      struct snd_soc_dai_driver drv = {
      -	.ac97_control
      +	.bus_control
      	=
      -	1
      +	true
      };
      // </smpl>
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      bc263214