|
@@ -931,6 +931,12 @@ static int mt9m111_probe(struct i2c_client *client,
|
|
struct soc_camera_subdev_desc *ssdd = soc_camera_i2c_to_desc(client);
|
|
struct soc_camera_subdev_desc *ssdd = soc_camera_i2c_to_desc(client);
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
|
|
+ if (client->dev.of_node) {
|
|
|
|
+ ssdd = devm_kzalloc(&client->dev, sizeof(*ssdd), GFP_KERNEL);
|
|
|
|
+ if (!ssdd)
|
|
|
|
+ return -ENOMEM;
|
|
|
|
+ client->dev.platform_data = ssdd;
|
|
|
|
+ }
|
|
if (!ssdd) {
|
|
if (!ssdd) {
|
|
dev_err(&client->dev, "mt9m111: driver needs platform data\n");
|
|
dev_err(&client->dev, "mt9m111: driver needs platform data\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
@@ -1015,6 +1021,11 @@ static int mt9m111_remove(struct i2c_client *client)
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+static const struct of_device_id mt9m111_of_match[] = {
|
|
|
|
+ { .compatible = "micron,mt9m111", },
|
|
|
|
+ {},
|
|
|
|
+};
|
|
|
|
+MODULE_DEVICE_TABLE(of, mt9m111_of_match);
|
|
|
|
|
|
static const struct i2c_device_id mt9m111_id[] = {
|
|
static const struct i2c_device_id mt9m111_id[] = {
|
|
{ "mt9m111", 0 },
|
|
{ "mt9m111", 0 },
|
|
@@ -1025,6 +1036,7 @@ MODULE_DEVICE_TABLE(i2c, mt9m111_id);
|
|
static struct i2c_driver mt9m111_i2c_driver = {
|
|
static struct i2c_driver mt9m111_i2c_driver = {
|
|
.driver = {
|
|
.driver = {
|
|
.name = "mt9m111",
|
|
.name = "mt9m111",
|
|
|
|
+ .of_match_table = of_match_ptr(mt9m111_of_match),
|
|
},
|
|
},
|
|
.probe = mt9m111_probe,
|
|
.probe = mt9m111_probe,
|
|
.remove = mt9m111_remove,
|
|
.remove = mt9m111_remove,
|