pinctrl: intel: Extract intel_pinctrl_get_soc_data() helper for wider use
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 29 Jul 2020 11:57:06 +0000 (14:57 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 18 Aug 2020 13:46:39 +0000 (16:46 +0300)
intel_pinctrl_get_soc_data() helper can be used in few driver instead of
open-coded variants. Thus, extract it as a standalone API.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/pinctrl/intel/pinctrl-intel.c
drivers/pinctrl/intel/pinctrl-intel.h

index b64997b..154ce3f 100644 (file)
@@ -1414,9 +1414,6 @@ static int intel_pinctrl_probe(struct platform_device *pdev,
        struct intel_pinctrl *pctrl;
        int i, ret, irq;
 
-       if (!soc_data)
-               return -EINVAL;
-
        pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL);
        if (!pctrl)
                return -ENOMEM;
@@ -1505,11 +1502,26 @@ int intel_pinctrl_probe_by_hid(struct platform_device *pdev)
        const struct intel_pinctrl_soc_data *data;
 
        data = device_get_match_data(&pdev->dev);
+       if (!data)
+               return -ENODATA;
+
        return intel_pinctrl_probe(pdev, data);
 }
 EXPORT_SYMBOL_GPL(intel_pinctrl_probe_by_hid);
 
 int intel_pinctrl_probe_by_uid(struct platform_device *pdev)
+{
+       const struct intel_pinctrl_soc_data *data;
+
+       data = intel_pinctrl_get_soc_data(pdev);
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
+       return intel_pinctrl_probe(pdev, data);
+}
+EXPORT_SYMBOL_GPL(intel_pinctrl_probe_by_uid);
+
+const struct intel_pinctrl_soc_data *intel_pinctrl_get_soc_data(struct platform_device *pdev)
 {
        const struct intel_pinctrl_soc_data *data = NULL;
        const struct intel_pinctrl_soc_data **table;
@@ -1532,15 +1544,15 @@ int intel_pinctrl_probe_by_uid(struct platform_device *pdev)
 
                id = platform_get_device_id(pdev);
                if (!id)
-                       return -ENODEV;
+                       return ERR_PTR(-ENODEV);
 
                table = (const struct intel_pinctrl_soc_data **)id->driver_data;
                data = table[pdev->id];
        }
 
-       return intel_pinctrl_probe(pdev, data);
+       return data ?: ERR_PTR(-ENODATA);
 }
-EXPORT_SYMBOL_GPL(intel_pinctrl_probe_by_uid);
+EXPORT_SYMBOL_GPL(intel_pinctrl_get_soc_data);
 
 #ifdef CONFIG_PM_SLEEP
 static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned int pin)
index 4e17308..3b0564a 100644 (file)
@@ -194,6 +194,8 @@ struct intel_pinctrl_soc_data {
        size_t ncommunities;
 };
 
+const struct intel_pinctrl_soc_data *intel_pinctrl_get_soc_data(struct platform_device *pdev);
+
 struct intel_pad_context;
 struct intel_community_context;