hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/sound/soc/rockchip/rockchip_multicodecs.c
....@@ -456,9 +456,6 @@
456456 dev_err(card->dev, "Failed to request headset detect irq");
457457 return ret;
458458 }
459
-
460
- queue_delayed_work(system_power_efficient_wq,
461
- &mc_data->handler, msecs_to_jiffies(50));
462459 }
463460 }
464461
....@@ -590,7 +587,7 @@
590587 struct device_node *node;
591588 struct input_dev *input;
592589 u32 val;
593
- int count, value;
590
+ int count, value, irq;
594591 int ret = 0, i = 0, idx = 0;
595592 const char *prefix = "rockchip,";
596593
....@@ -722,7 +719,7 @@
722719
723720 input = devm_input_allocate_device(&pdev->dev);
724721 if (IS_ERR(input)) {
725
- dev_err(&pdev->dev, "failed to allocate input device\n");
722
+ dev_err(&pdev->dev, "Failed to allocate input device\n");
726723 return PTR_ERR(input);
727724 }
728725
....@@ -745,7 +742,7 @@
745742 mc_data->input = input;
746743 ret = mc_keys_setup_polling(mc_data, mc_keys_poll);
747744 if (ret) {
748
- dev_err(&pdev->dev, "Unable to set up polling: %d\n", ret);
745
+ dev_err(&pdev->dev, "Failed to set up polling: %d\n", ret);
749746 return ret;
750747 }
751748
....@@ -754,7 +751,7 @@
754751
755752 ret = input_register_device(mc_data->input);
756753 if (ret) {
757
- dev_err(&pdev->dev, "Unable to register input device: %d\n", ret);
754
+ dev_err(&pdev->dev, "Failed to register input device: %d\n", ret);
758755 return ret;
759756 }
760757 }
....@@ -779,33 +776,51 @@
779776
780777 mc_data->extcon = devm_extcon_dev_allocate(&pdev->dev, headset_extcon_cable);
781778 if (IS_ERR(mc_data->extcon)) {
782
- dev_err(&pdev->dev, "allocate extcon failed\n");
779
+ dev_err(&pdev->dev, "Failed to allocate extcon\n");
783780 return PTR_ERR(mc_data->extcon);
784781 }
785782
786783 ret = devm_extcon_dev_register(&pdev->dev, mc_data->extcon);
787784 if (ret) {
788
- dev_err(&pdev->dev, "failed to register extcon: %d\n", ret);
785
+ dev_err(&pdev->dev, "Failed to register extcon: %d\n", ret);
789786 return ret;
790787 }
791788
792
- ret = snd_soc_of_parse_audio_routing(card, "rockchip,audio-routing");
793
- if (ret < 0)
794
- dev_warn(&pdev->dev, "Audio routing invalid/unspecified\n");
789
+ snd_soc_of_parse_audio_routing(card, "rockchip,audio-routing");
795790
796791 snd_soc_card_set_drvdata(card, mc_data);
792
+ platform_set_drvdata(pdev, card);
797793
798794 ret = devm_snd_soc_register_card(&pdev->dev, card);
799
- if (ret == -EPROBE_DEFER)
800
- return -EPROBE_DEFER;
801795 if (ret) {
802
- dev_err(&pdev->dev, "card register failed %d\n", ret);
796
+ dev_err(&pdev->dev, "Failed to register card: %d\n", ret);
803797 return ret;
804798 }
805799
806
- platform_set_drvdata(pdev, card);
800
+ irq = gpiod_to_irq(mc_data->hp_det_gpio);
801
+ if (irq >= 0)
802
+ queue_delayed_work(system_power_efficient_wq,
803
+ &mc_data->handler, msecs_to_jiffies(50));
807804
808805 return ret;
806
+}
807
+
808
+static int rk_multicodec_remove(struct platform_device *pdev)
809
+{
810
+ struct snd_soc_card *card = platform_get_drvdata(pdev);
811
+ struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(card);
812
+
813
+ cancel_delayed_work_sync(&mc_data->handler);
814
+
815
+ return 0;
816
+}
817
+
818
+static void rk_multicodec_shutdown(struct platform_device *pdev)
819
+{
820
+ struct snd_soc_card *card = platform_get_drvdata(pdev);
821
+ struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(card);
822
+
823
+ cancel_delayed_work_sync(&mc_data->handler);
809824 }
810825
811826 static const struct of_device_id rockchip_multicodecs_of_match[] = {
....@@ -817,6 +832,8 @@
817832
818833 static struct platform_driver rockchip_multicodecs_driver = {
819834 .probe = rk_multicodecs_probe,
835
+ .remove = rk_multicodec_remove,
836
+ .shutdown = rk_multicodec_shutdown,
820837 .driver = {
821838 .name = DRV_NAME,
822839 .pm = &snd_soc_pm_ops,