/* * Translate OpenFirmware node properties into platform_data */ static struct pca953x_platform_data * pca953x_get_alt_pdata(struct i2c_client *client) { struct pca953x_platform_data *pdata; struct device_node *node; const uint16_t *val; node = dev_archdata_get_node(&client->dev.archdata); if (node == NULL) return NULL; pdata = kzalloc(sizeof(struct pca953x_platform_data), GFP_KERNEL); if (pdata == NULL) { dev_err(&client->dev, "Unable to allocate platform_data\n"); return NULL; } pdata->gpio_base = -1; val = of_get_property(node, "linux,gpio-base", NULL); if (val) { if (*val < 0) dev_warn(&client->dev, "invalid gpio-base in device tree\n"); else pdata->gpio_base = *val; } val = of_get_property(node, "polarity", NULL); if (val) pdata->invert = *val; return pdata; }
static int of_dev_node_match(struct device *dev, void *data) { return dev_archdata_get_node(&dev->archdata) == data; }