forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2
kernel/drivers/pinctrl/samsung/pinctrl-samsung.c
....@@ -20,7 +20,7 @@
2020 #include <linux/io.h>
2121 #include <linux/slab.h>
2222 #include <linux/err.h>
23
-#include <linux/gpio.h>
23
+#include <linux/gpio/driver.h>
2424 #include <linux/irqdomain.h>
2525 #include <linux/of_device.h>
2626 #include <linux/spinlock.h>
....@@ -1002,6 +1002,16 @@
10021002 return &(of_data->ctrl[id]);
10031003 }
10041004
1005
+static void samsung_banks_of_node_put(struct samsung_pinctrl_drv_data *d)
1006
+{
1007
+ struct samsung_pin_bank *bank;
1008
+ unsigned int i;
1009
+
1010
+ bank = d->pin_banks;
1011
+ for (i = 0; i < d->nr_banks; ++i, ++bank)
1012
+ of_node_put(bank->of_node);
1013
+}
1014
+
10051015 /* retrieve the soc specific data */
10061016 static const struct samsung_pin_ctrl *
10071017 samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
....@@ -1077,7 +1087,7 @@
10771087 continue;
10781088 bank = d->pin_banks;
10791089 for (i = 0; i < d->nr_banks; ++i, ++bank) {
1080
- if (!strcmp(bank->name, np->name)) {
1090
+ if (of_node_name_eq(np, bank->name)) {
10811091 bank->of_node = np;
10821092 break;
10831093 }
....@@ -1116,19 +1126,19 @@
11161126 if (ctrl->retention_data) {
11171127 drvdata->retention_ctrl = ctrl->retention_data->init(drvdata,
11181128 ctrl->retention_data);
1119
- if (IS_ERR(drvdata->retention_ctrl))
1120
- return PTR_ERR(drvdata->retention_ctrl);
1129
+ if (IS_ERR(drvdata->retention_ctrl)) {
1130
+ ret = PTR_ERR(drvdata->retention_ctrl);
1131
+ goto err_put_banks;
1132
+ }
11211133 }
11221134
11231135 ret = samsung_pinctrl_register(pdev, drvdata);
11241136 if (ret)
1125
- return ret;
1137
+ goto err_put_banks;
11261138
11271139 ret = samsung_gpiolib_register(pdev, drvdata);
1128
- if (ret) {
1129
- samsung_pinctrl_unregister(pdev, drvdata);
1130
- return ret;
1131
- }
1140
+ if (ret)
1141
+ goto err_unregister;
11321142
11331143 if (ctrl->eint_gpio_init)
11341144 ctrl->eint_gpio_init(drvdata);
....@@ -1138,9 +1148,15 @@
11381148 platform_set_drvdata(pdev, drvdata);
11391149
11401150 return 0;
1151
+
1152
+err_unregister:
1153
+ samsung_pinctrl_unregister(pdev, drvdata);
1154
+err_put_banks:
1155
+ samsung_banks_of_node_put(drvdata);
1156
+ return ret;
11411157 }
11421158
1143
-/**
1159
+/*
11441160 * samsung_pinctrl_suspend - save pinctrl state for suspend
11451161 *
11461162 * Save data for all banks handled by this device.
....@@ -1187,7 +1203,7 @@
11871203 return 0;
11881204 }
11891205
1190
-/**
1206
+/*
11911207 * samsung_pinctrl_resume - restore pinctrl state from suspend
11921208 *
11931209 * Restore one of the banks that was saved during suspend.