|
@@ -789,17 +789,18 @@ static const struct of_device_id samsung_pinctrl_dt_match[];
|
|
|
|
|
|
/* retrieve the soc specific data */
|
|
|
static struct samsung_pin_ctrl *samsung_pinctrl_get_soc_data(
|
|
|
+ struct samsung_pinctrl_drv_data *d,
|
|
|
struct platform_device *pdev)
|
|
|
{
|
|
|
int id;
|
|
|
const struct of_device_id *match;
|
|
|
- const struct device_node *node = pdev->dev.of_node;
|
|
|
+ struct device_node *node = pdev->dev.of_node;
|
|
|
struct device_node *np;
|
|
|
struct samsung_pin_ctrl *ctrl;
|
|
|
struct samsung_pin_bank *bank;
|
|
|
int i;
|
|
|
|
|
|
- id = of_alias_get_id(pdev->dev.of_node, "pinctrl");
|
|
|
+ id = of_alias_get_id(node, "pinctrl");
|
|
|
if (id < 0) {
|
|
|
dev_err(&pdev->dev, "failed to get alias id\n");
|
|
|
return NULL;
|
|
@@ -809,6 +810,7 @@ static struct samsung_pin_ctrl *samsung_pinctrl_get_soc_data(
|
|
|
|
|
|
bank = ctrl->pin_banks;
|
|
|
for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
|
|
|
+ bank->drvdata = d;
|
|
|
bank->pin_base = ctrl->nr_pins;
|
|
|
ctrl->nr_pins += bank->nr_pins;
|
|
|
if (bank->eint_type == EINT_TYPE_GPIO) {
|
|
@@ -848,18 +850,18 @@ static int __devinit samsung_pinctrl_probe(struct platform_device *pdev)
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
|
- ctrl = samsung_pinctrl_get_soc_data(pdev);
|
|
|
- if (!ctrl) {
|
|
|
- dev_err(&pdev->dev, "driver data not available\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
|
|
|
if (!drvdata) {
|
|
|
dev_err(dev, "failed to allocate memory for driver's "
|
|
|
"private data\n");
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
+
|
|
|
+ ctrl = samsung_pinctrl_get_soc_data(drvdata, pdev);
|
|
|
+ if (!ctrl) {
|
|
|
+ dev_err(&pdev->dev, "driver data not available\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
drvdata->ctrl = ctrl;
|
|
|
drvdata->dev = dev;
|
|
|
|