Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: i2c: ov08d10: Replace client->dev usage

The driver needs to access the struct device in many places, and
retrieves it from the i2c_client itself retrieved with
v4l2_get_subdevdata(). Store it as a pointer in struct ov08d10 and
access it from there instead, to simplify the driver.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Mehdi Djait <mehdi.djait@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>

authored by

Laurent Pinchart and committed by
Mauro Carvalho Chehab
4e2b34c3 70dbc965

+31 -28
+31 -28
drivers/media/i2c/ov08d10.c
··· 515 515 }; 516 516 517 517 struct ov08d10 { 518 + struct device *dev; 519 + 518 520 struct v4l2_subdev sd; 519 521 struct media_pad pad; 520 522 struct v4l2_ctrl_handler ctrl_handler; ··· 665 663 ret = i2c_smbus_write_byte_data(client, r_list->regs[i].address, 666 664 r_list->regs[i].val); 667 665 if (ret) { 668 - dev_err_ratelimited(&client->dev, 666 + dev_err_ratelimited(ov08d10->dev, 669 667 "failed to write reg 0x%2.2x. error = %d", 670 668 r_list->regs[i].address, ret); 671 669 return ret; ··· 851 849 { 852 850 struct ov08d10 *ov08d10 = container_of(ctrl->handler, 853 851 struct ov08d10, ctrl_handler); 854 - struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd); 855 852 s64 exposure_max; 856 853 int ret; 857 854 ··· 866 865 } 867 866 868 867 /* V4L2 controls values will be applied only when power is already up */ 869 - if (!pm_runtime_get_if_in_use(&client->dev)) 868 + if (!pm_runtime_get_if_in_use(ov08d10->dev)) 870 869 return 0; 871 870 872 871 switch (ctrl->id) { ··· 902 901 break; 903 902 } 904 903 905 - pm_runtime_put(&client->dev); 904 + pm_runtime_put(ov08d10->dev); 906 905 907 906 return ret; 908 907 } ··· 1026 1025 /* soft reset */ 1027 1026 ret = i2c_smbus_write_byte_data(client, OV08D10_REG_PAGE, 0x00); 1028 1027 if (ret < 0) { 1029 - dev_err(&client->dev, "failed to reset sensor"); 1028 + dev_err(ov08d10->dev, "failed to reset sensor"); 1030 1029 return ret; 1031 1030 } 1032 1031 ret = i2c_smbus_write_byte_data(client, 0x20, 0x0e); 1033 1032 if (ret < 0) { 1034 - dev_err(&client->dev, "failed to reset sensor"); 1033 + dev_err(ov08d10->dev, "failed to reset sensor"); 1035 1034 return ret; 1036 1035 } 1037 1036 usleep_range(3000, 4000); 1038 1037 ret = i2c_smbus_write_byte_data(client, 0x20, 0x0b); 1039 1038 if (ret < 0) { 1040 - dev_err(&client->dev, "failed to reset sensor"); 1039 + dev_err(ov08d10->dev, "failed to reset sensor"); 1041 1040 return ret; 1042 1041 } 1043 1042 1044 1043 /* update sensor setting */ 1045 1044 ret = ov08d10_write_reg_list(ov08d10, reg_list); 1046 1045 if (ret) { 1047 - dev_err(&client->dev, "failed to set plls"); 1046 + dev_err(ov08d10->dev, "failed to set plls"); 1048 1047 return ret; 1049 1048 } 1050 1049 1051 1050 reg_list = &ov08d10->cur_mode->reg_list; 1052 1051 ret = ov08d10_write_reg_list(ov08d10, reg_list); 1053 1052 if (ret) { 1054 - dev_err(&client->dev, "failed to set mode"); 1053 + dev_err(ov08d10->dev, "failed to set mode"); 1055 1054 return ret; 1056 1055 } 1057 1056 ··· 1078 1077 1079 1078 ret = i2c_smbus_write_byte_data(client, OV08D10_REG_PAGE, 0x00); 1080 1079 if (ret < 0) { 1081 - dev_err(&client->dev, "failed to stop streaming"); 1080 + dev_err(ov08d10->dev, "failed to stop streaming"); 1082 1081 return; 1083 1082 } 1084 1083 ret = i2c_smbus_write_byte_data(client, OV08D10_REG_MODE_SELECT, 1085 1084 OV08D10_MODE_STANDBY); 1086 1085 if (ret < 0) { 1087 - dev_err(&client->dev, "failed to stop streaming"); 1086 + dev_err(ov08d10->dev, "failed to stop streaming"); 1088 1087 return; 1089 1088 } 1090 1089 1091 1090 ret = i2c_smbus_write_byte_data(client, OV08D10_REG_PAGE, 0x01); 1092 1091 if (ret < 0) { 1093 - dev_err(&client->dev, "failed to stop streaming"); 1092 + dev_err(ov08d10->dev, "failed to stop streaming"); 1094 1093 return; 1095 1094 } 1096 1095 } ··· 1098 1097 static int ov08d10_set_stream(struct v4l2_subdev *sd, int enable) 1099 1098 { 1100 1099 struct ov08d10 *ov08d10 = to_ov08d10(sd); 1101 - struct i2c_client *client = v4l2_get_subdevdata(sd); 1102 1100 int ret = 0; 1103 1101 1104 1102 mutex_lock(&ov08d10->mutex); 1105 1103 if (enable) { 1106 - ret = pm_runtime_resume_and_get(&client->dev); 1104 + ret = pm_runtime_resume_and_get(ov08d10->dev); 1107 1105 if (ret < 0) { 1108 1106 mutex_unlock(&ov08d10->mutex); 1109 1107 return ret; ··· 1112 1112 if (ret) { 1113 1113 enable = 0; 1114 1114 ov08d10_stop_streaming(ov08d10); 1115 - pm_runtime_put(&client->dev); 1115 + pm_runtime_put(ov08d10->dev); 1116 1116 } 1117 1117 } else { 1118 1118 ov08d10_stop_streaming(ov08d10); 1119 - pm_runtime_put(&client->dev); 1119 + pm_runtime_put(ov08d10->dev); 1120 1120 } 1121 1121 1122 1122 /* vflip and hflip cannot change during streaming */ ··· 1293 1293 chip_id = val | ret; 1294 1294 1295 1295 if ((chip_id & OV08D10_ID_MASK) != OV08D10_CHIP_ID) { 1296 - dev_err(&client->dev, "unexpected sensor id(0x%04x)\n", 1296 + dev_err(ov08d10->dev, "unexpected sensor id(0x%04x)\n", 1297 1297 chip_id); 1298 1298 return -EINVAL; 1299 1299 } ··· 1301 1301 return 0; 1302 1302 } 1303 1303 1304 - static int ov08d10_get_hwcfg(struct ov08d10 *ov08d10, struct device *dev) 1304 + static int ov08d10_get_hwcfg(struct ov08d10 *ov08d10) 1305 1305 { 1306 + struct device *dev = ov08d10->dev; 1306 1307 struct fwnode_handle *ep; 1307 1308 struct fwnode_handle *fwnode = dev_fwnode(dev); 1308 1309 struct v4l2_fwnode_endpoint bus_cfg = { ··· 1381 1380 v4l2_async_unregister_subdev(sd); 1382 1381 media_entity_cleanup(&sd->entity); 1383 1382 v4l2_ctrl_handler_free(sd->ctrl_handler); 1384 - pm_runtime_disable(&client->dev); 1383 + pm_runtime_disable(ov08d10->dev); 1385 1384 mutex_destroy(&ov08d10->mutex); 1386 1385 } 1387 1386 ··· 1394 1393 if (!ov08d10) 1395 1394 return -ENOMEM; 1396 1395 1397 - ret = ov08d10_get_hwcfg(ov08d10, &client->dev); 1396 + ov08d10->dev = &client->dev; 1397 + 1398 + ret = ov08d10_get_hwcfg(ov08d10); 1398 1399 if (ret) { 1399 - dev_err(&client->dev, "failed to get HW configuration: %d", 1400 + dev_err(ov08d10->dev, "failed to get HW configuration: %d", 1400 1401 ret); 1401 1402 return ret; 1402 1403 } ··· 1407 1404 1408 1405 ret = ov08d10_identify_module(ov08d10); 1409 1406 if (ret) { 1410 - dev_err(&client->dev, "failed to find sensor: %d", ret); 1407 + dev_err(ov08d10->dev, "failed to find sensor: %d", ret); 1411 1408 return ret; 1412 1409 } 1413 1410 ··· 1415 1412 ov08d10->cur_mode = &ov08d10->priv_lane->sp_modes[0]; 1416 1413 ret = ov08d10_init_controls(ov08d10); 1417 1414 if (ret) { 1418 - dev_err(&client->dev, "failed to init controls: %d", ret); 1415 + dev_err(ov08d10->dev, "failed to init controls: %d", ret); 1419 1416 goto probe_error_v4l2_ctrl_handler_free; 1420 1417 } 1421 1418 ··· 1425 1422 ov08d10->pad.flags = MEDIA_PAD_FL_SOURCE; 1426 1423 ret = media_entity_pads_init(&ov08d10->sd.entity, 1, &ov08d10->pad); 1427 1424 if (ret) { 1428 - dev_err(&client->dev, "failed to init entity pads: %d", ret); 1425 + dev_err(ov08d10->dev, "failed to init entity pads: %d", ret); 1429 1426 goto probe_error_v4l2_ctrl_handler_free; 1430 1427 } 1431 1428 1432 1429 ret = v4l2_async_register_subdev_sensor(&ov08d10->sd); 1433 1430 if (ret < 0) { 1434 - dev_err(&client->dev, "failed to register V4L2 subdev: %d", 1431 + dev_err(ov08d10->dev, "failed to register V4L2 subdev: %d", 1435 1432 ret); 1436 1433 goto probe_error_media_entity_cleanup; 1437 1434 } ··· 1440 1437 * Device is already turned on by i2c-core with ACPI domain PM. 1441 1438 * Enable runtime PM and turn off the device. 1442 1439 */ 1443 - pm_runtime_set_active(&client->dev); 1444 - pm_runtime_enable(&client->dev); 1445 - pm_runtime_idle(&client->dev); 1440 + pm_runtime_set_active(ov08d10->dev); 1441 + pm_runtime_enable(ov08d10->dev); 1442 + pm_runtime_idle(ov08d10->dev); 1446 1443 1447 1444 return 0; 1448 1445