From 151fecfb72a0d602dfe79790602ef64b4e241574 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 19 Feb 2024 01:51:07 +0000
Subject: [PATCH] export RK_PA3
---
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