|
@@ -407,7 +407,7 @@ matrix_keypad_parse_dt(struct device *dev)
|
|
struct matrix_keypad_platform_data *pdata;
|
|
struct matrix_keypad_platform_data *pdata;
|
|
struct device_node *np = dev->of_node;
|
|
struct device_node *np = dev->of_node;
|
|
unsigned int *gpios;
|
|
unsigned int *gpios;
|
|
- int i, nrow, ncol;
|
|
|
|
|
|
+ int ret, i, nrow, ncol;
|
|
|
|
|
|
if (!np) {
|
|
if (!np) {
|
|
dev_err(dev, "device lacks DT data\n");
|
|
dev_err(dev, "device lacks DT data\n");
|
|
@@ -452,12 +452,19 @@ matrix_keypad_parse_dt(struct device *dev)
|
|
return ERR_PTR(-ENOMEM);
|
|
return ERR_PTR(-ENOMEM);
|
|
}
|
|
}
|
|
|
|
|
|
- for (i = 0; i < pdata->num_row_gpios; i++)
|
|
|
|
- gpios[i] = of_get_named_gpio(np, "row-gpios", i);
|
|
|
|
|
|
+ for (i = 0; i < nrow; i++) {
|
|
|
|
+ ret = of_get_named_gpio(np, "row-gpios", i);
|
|
|
|
+ if (ret < 0)
|
|
|
|
+ return ERR_PTR(ret);
|
|
|
|
+ gpios[i] = ret;
|
|
|
|
+ }
|
|
|
|
|
|
- for (i = 0; i < pdata->num_col_gpios; i++)
|
|
|
|
- gpios[pdata->num_row_gpios + i] =
|
|
|
|
- of_get_named_gpio(np, "col-gpios", i);
|
|
|
|
|
|
+ for (i = 0; i < ncol; i++) {
|
|
|
|
+ ret = of_get_named_gpio(np, "col-gpios", i);
|
|
|
|
+ if (ret < 0)
|
|
|
|
+ return ERR_PTR(ret);
|
|
|
|
+ gpios[nrow + i] = ret;
|
|
|
|
+ }
|
|
|
|
|
|
pdata->row_gpios = gpios;
|
|
pdata->row_gpios = gpios;
|
|
pdata->col_gpios = &gpios[pdata->num_row_gpios];
|
|
pdata->col_gpios = &gpios[pdata->num_row_gpios];
|
|
@@ -484,10 +491,8 @@ static int matrix_keypad_probe(struct platform_device *pdev)
|
|
pdata = dev_get_platdata(&pdev->dev);
|
|
pdata = dev_get_platdata(&pdev->dev);
|
|
if (!pdata) {
|
|
if (!pdata) {
|
|
pdata = matrix_keypad_parse_dt(&pdev->dev);
|
|
pdata = matrix_keypad_parse_dt(&pdev->dev);
|
|
- if (IS_ERR(pdata)) {
|
|
|
|
- dev_err(&pdev->dev, "no platform data defined\n");
|
|
|
|
|
|
+ if (IS_ERR(pdata))
|
|
return PTR_ERR(pdata);
|
|
return PTR_ERR(pdata);
|
|
- }
|
|
|
|
} else if (!pdata->keymap_data) {
|
|
} else if (!pdata->keymap_data) {
|
|
dev_err(&pdev->dev, "no keymap data defined\n");
|
|
dev_err(&pdev->dev, "no keymap data defined\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|