From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Wed, 03 Jan 2024 09:43:39 +0000 Subject: [PATCH] update kernel to 5.10.198 --- kernel/sound/soc/rockchip/rockchip_multicodecs.c | 49 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 33 insertions(+), 16 deletions(-) diff --git a/kernel/sound/soc/rockchip/rockchip_multicodecs.c b/kernel/sound/soc/rockchip/rockchip_multicodecs.c index f7982ad..e4b0a15 100644 --- a/kernel/sound/soc/rockchip/rockchip_multicodecs.c +++ b/kernel/sound/soc/rockchip/rockchip_multicodecs.c @@ -456,9 +456,6 @@ dev_err(card->dev, "Failed to request headset detect irq"); return ret; } - - queue_delayed_work(system_power_efficient_wq, - &mc_data->handler, msecs_to_jiffies(50)); } } @@ -590,7 +587,7 @@ struct device_node *node; struct input_dev *input; u32 val; - int count, value; + int count, value, irq; int ret = 0, i = 0, idx = 0; const char *prefix = "rockchip,"; @@ -722,7 +719,7 @@ input = devm_input_allocate_device(&pdev->dev); if (IS_ERR(input)) { - dev_err(&pdev->dev, "failed to allocate input device\n"); + dev_err(&pdev->dev, "Failed to allocate input device\n"); return PTR_ERR(input); } @@ -745,7 +742,7 @@ mc_data->input = input; ret = mc_keys_setup_polling(mc_data, mc_keys_poll); if (ret) { - dev_err(&pdev->dev, "Unable to set up polling: %d\n", ret); + dev_err(&pdev->dev, "Failed to set up polling: %d\n", ret); return ret; } @@ -754,7 +751,7 @@ ret = input_register_device(mc_data->input); if (ret) { - dev_err(&pdev->dev, "Unable to register input device: %d\n", ret); + dev_err(&pdev->dev, "Failed to register input device: %d\n", ret); return ret; } } @@ -779,33 +776,51 @@ mc_data->extcon = devm_extcon_dev_allocate(&pdev->dev, headset_extcon_cable); if (IS_ERR(mc_data->extcon)) { - dev_err(&pdev->dev, "allocate extcon failed\n"); + dev_err(&pdev->dev, "Failed to allocate extcon\n"); return PTR_ERR(mc_data->extcon); } ret = devm_extcon_dev_register(&pdev->dev, mc_data->extcon); if (ret) { - dev_err(&pdev->dev, "failed to register extcon: %d\n", ret); + dev_err(&pdev->dev, "Failed to register extcon: %d\n", ret); return ret; } - ret = snd_soc_of_parse_audio_routing(card, "rockchip,audio-routing"); - if (ret < 0) - dev_warn(&pdev->dev, "Audio routing invalid/unspecified\n"); + snd_soc_of_parse_audio_routing(card, "rockchip,audio-routing"); snd_soc_card_set_drvdata(card, mc_data); + platform_set_drvdata(pdev, card); ret = devm_snd_soc_register_card(&pdev->dev, card); - if (ret == -EPROBE_DEFER) - return -EPROBE_DEFER; if (ret) { - dev_err(&pdev->dev, "card register failed %d\n", ret); + dev_err(&pdev->dev, "Failed to register card: %d\n", ret); return ret; } - platform_set_drvdata(pdev, card); + irq = gpiod_to_irq(mc_data->hp_det_gpio); + if (irq >= 0) + queue_delayed_work(system_power_efficient_wq, + &mc_data->handler, msecs_to_jiffies(50)); return ret; +} + +static int rk_multicodec_remove(struct platform_device *pdev) +{ + struct snd_soc_card *card = platform_get_drvdata(pdev); + struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(card); + + cancel_delayed_work_sync(&mc_data->handler); + + return 0; +} + +static void rk_multicodec_shutdown(struct platform_device *pdev) +{ + struct snd_soc_card *card = platform_get_drvdata(pdev); + struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(card); + + cancel_delayed_work_sync(&mc_data->handler); } static const struct of_device_id rockchip_multicodecs_of_match[] = { @@ -817,6 +832,8 @@ static struct platform_driver rockchip_multicodecs_driver = { .probe = rk_multicodecs_probe, + .remove = rk_multicodec_remove, + .shutdown = rk_multicodec_shutdown, .driver = { .name = DRV_NAME, .pm = &snd_soc_pm_ops, -- Gitblit v1.6.2