hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/mfd/dln2.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Driver for the Diolan DLN-2 USB adapter
34 *
....@@ -6,10 +7,6 @@
67 * Derived from:
78 * i2c-diolan-u2c.c
89 * Copyright (c) 2010-2011 Ericsson AB
9
- *
10
- * This program is free software; you can redistribute it and/or
11
- * modify it under the terms of the GNU General Public License as
12
- * published by the Free Software Foundation, version 2.
1310 */
1411
1512 #include <linux/kernel.h>
....@@ -53,6 +50,7 @@
5350 DLN2_HANDLE_GPIO,
5451 DLN2_HANDLE_I2C,
5552 DLN2_HANDLE_SPI,
53
+ DLN2_HANDLE_ADC,
5654 DLN2_HANDLES
5755 };
5856
....@@ -652,8 +650,19 @@
652650 return 0;
653651 }
654652
653
+enum {
654
+ DLN2_ACPI_MATCH_GPIO = 0,
655
+ DLN2_ACPI_MATCH_I2C = 1,
656
+ DLN2_ACPI_MATCH_SPI = 2,
657
+ DLN2_ACPI_MATCH_ADC = 3,
658
+};
659
+
655660 static struct dln2_platform_data dln2_pdata_gpio = {
656661 .handle = DLN2_HANDLE_GPIO,
662
+};
663
+
664
+static struct mfd_cell_acpi_match dln2_acpi_match_gpio = {
665
+ .adr = DLN2_ACPI_MATCH_GPIO,
657666 };
658667
659668 /* Only one I2C port seems to be supported on current hardware */
....@@ -662,26 +671,53 @@
662671 .port = 0,
663672 };
664673
674
+static struct mfd_cell_acpi_match dln2_acpi_match_i2c = {
675
+ .adr = DLN2_ACPI_MATCH_I2C,
676
+};
677
+
665678 /* Only one SPI port supported */
666679 static struct dln2_platform_data dln2_pdata_spi = {
667680 .handle = DLN2_HANDLE_SPI,
668681 .port = 0,
669682 };
670683
684
+static struct mfd_cell_acpi_match dln2_acpi_match_spi = {
685
+ .adr = DLN2_ACPI_MATCH_SPI,
686
+};
687
+
688
+/* Only one ADC port supported */
689
+static struct dln2_platform_data dln2_pdata_adc = {
690
+ .handle = DLN2_HANDLE_ADC,
691
+ .port = 0,
692
+};
693
+
694
+static struct mfd_cell_acpi_match dln2_acpi_match_adc = {
695
+ .adr = DLN2_ACPI_MATCH_ADC,
696
+};
697
+
671698 static const struct mfd_cell dln2_devs[] = {
672699 {
673700 .name = "dln2-gpio",
701
+ .acpi_match = &dln2_acpi_match_gpio,
674702 .platform_data = &dln2_pdata_gpio,
675703 .pdata_size = sizeof(struct dln2_platform_data),
676704 },
677705 {
678706 .name = "dln2-i2c",
707
+ .acpi_match = &dln2_acpi_match_i2c,
679708 .platform_data = &dln2_pdata_i2c,
680709 .pdata_size = sizeof(struct dln2_platform_data),
681710 },
682711 {
683712 .name = "dln2-spi",
713
+ .acpi_match = &dln2_acpi_match_spi,
684714 .platform_data = &dln2_pdata_spi,
715
+ .pdata_size = sizeof(struct dln2_platform_data),
716
+ },
717
+ {
718
+ .name = "dln2-adc",
719
+ .acpi_match = &dln2_acpi_match_adc,
720
+ .platform_data = &dln2_pdata_adc,
685721 .pdata_size = sizeof(struct dln2_platform_data),
686722 },
687723 };
....@@ -800,6 +836,7 @@
800836 dln2_stop_rx_urbs(dln2);
801837
802838 out_free:
839
+ usb_put_dev(dln2->usb_dev);
803840 dln2_free(dln2);
804841
805842 return ret;