Bootstrap

RK3588 Linux插入耳机后系统卡死

如果声卡用的是rockchip,multicodecs-card,那么原因可能是因为rk_multicodecs_probe函数中获取adc资源时(devm_iio_channel_get)adc资源还没有准备好。

之后在插入耳机的状态下,驱动会执行到adc_jack_handler函数的iio_read_channel_processed代码中,因为adc资源获取出错导致iio_read_channel_processed函数执行无法访问正确的adc资源,从而出现内存错误而报错。

解决方法:在rk_multicodecs_probe函数中增加判断机制,若获取adc资源出错则返回EPROBE_DEFER,此错误值表示延迟一段时间后(待adc资源准备完成)再次执行probe函数。

代码如下:

struct iio_channel *adc;

adc = devm_iio_channel_get(&pdev->dev, "adc-detect");
    if (IS_ERR(adc))
    {

        if(PTR_ERR(adc) == -EPROBE_DEFER){
                return -EPROBE_DEFER;

        }
    }

附报错日志:

;