linux icon indicating copy to clipboard operation
linux copied to clipboard

SoundWire/SDCA: introduce interrupt handler functions

Open plbossart opened this issue 1 year ago • 2 comments

POC branch to show how we can replace custom interrupt handling in different drivers with a helper library.

Nothing new under the sun, interrupt capabilities need to be enumerated, interrupt sources registered with a callback and context, and the helper takes care of clearing interrupt status after invoking callback.

Tested on MTL w/ RT712 codec for jack detection only (buttons not tested). The changes in RT711/RT712 are rather invasive and should be preceded by a cleanup prior to changes.

@bardliao @shumingfan @charleskeepax @ujfalusi comments welcome on the last 3 commits (the rest is just same as https://github.com/thesofproject/linux/pull/5010)

plbossart avatar May 31 '24 19:05 plbossart

Two problems:

  • kernel oops with RT711-sdca, something's not well initialized
  • kmod load/unload has dependencies on new module sdca_irq_handler. Gah.

plbossart avatar Jun 04 '24 06:06 plbossart

one more issue:

Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: soundwire_cadence:cdns_update_slave_status_work: soundwire_intel soundwire_intel.link.0: Slave status change: 0x4000000
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: snd_soc_rt711_sdca:rt711_sdca_interrupt_callback: rt711-sdca sdw:0:0:025d:0711:01: rt711_sdca_interrupt_callback control_port_stat=4, sdca_cascade=1
Jun 04 08:46:51 ba-mtlp-sdw-aioc-03 kernel: rt711-sdca sdw:0:0:025d:0711:01: Reached MAX_RETRY on alert read

This is due to bad code in an 'optimization', only the first register was handled.

plbossart avatar Jun 04 '24 12:06 plbossart

closing, will re-add a new branch

plbossart avatar Jul 30 '24 11:07 plbossart