Lines Matching refs:ar0230

103 struct ar0230 {  struct
129 #define to_ar0230(sd) container_of(sd, struct ar0230, subdev) argument
913 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_set_fmt() local
917 mutex_lock(&ar0230->mutex); in ar0230_set_fmt()
928 mutex_unlock(&ar0230->mutex); in ar0230_set_fmt()
932 ar0230->cur_mode = mode; in ar0230_set_fmt()
934 __v4l2_ctrl_modify_range(ar0230->hblank, h_blank, in ar0230_set_fmt()
937 __v4l2_ctrl_modify_range(ar0230->vblank, vblank_def, in ar0230_set_fmt()
942 mutex_unlock(&ar0230->mutex); in ar0230_set_fmt()
951 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_get_fmt() local
952 const struct ar0230_mode *mode = ar0230->cur_mode; in ar0230_get_fmt()
954 mutex_lock(&ar0230->mutex); in ar0230_get_fmt()
959 mutex_unlock(&ar0230->mutex); in ar0230_get_fmt()
968 mutex_unlock(&ar0230->mutex); in ar0230_get_fmt()
1002 static int ar0230_enable_test_pattern(struct ar0230 *ar0230, u32 pattern) in ar0230_enable_test_pattern() argument
1007 static void ar0230_get_module_inf(struct ar0230 *ar0230, in ar0230_get_module_inf() argument
1012 strlcpy(inf->base.module, ar0230->module_name, in ar0230_get_module_inf()
1014 strlcpy(inf->base.lens, ar0230->len_name, sizeof(inf->base.lens)); in ar0230_get_module_inf()
1019 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_ioctl() local
1025 ar0230_get_module_inf(ar0230, (struct rkmodule_inf *)arg); in ar0230_ioctl()
1030 ret = ar0230_write_reg(ar0230->client, AR0230_REG_CTRL_MODE, in ar0230_ioctl()
1033 ret = ar0230_write_reg(ar0230->client, AR0230_REG_CTRL_MODE, in ar0230_ioctl()
1080 static int __ar0230_start_stream(struct ar0230 *ar0230) in __ar0230_start_stream() argument
1084 ret = ar0230_write_array(ar0230->client, ar0230->cur_mode->reg_list); in __ar0230_start_stream()
1089 mutex_unlock(&ar0230->mutex); in __ar0230_start_stream()
1090 ret = v4l2_ctrl_handler_setup(&ar0230->ctrl_handler); in __ar0230_start_stream()
1091 mutex_lock(&ar0230->mutex); in __ar0230_start_stream()
1095 return ar0230_write_reg(ar0230->client, AR0230_REG_CTRL_MODE, in __ar0230_start_stream()
1099 static int __ar0230_stop_stream(struct ar0230 *ar0230) in __ar0230_stop_stream() argument
1101 return ar0230_write_reg(ar0230->client, AR0230_REG_CTRL_MODE, in __ar0230_stop_stream()
1107 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_s_stream() local
1108 struct i2c_client *client = ar0230->client; in ar0230_s_stream()
1111 mutex_lock(&ar0230->mutex); in ar0230_s_stream()
1113 if (on == ar0230->streaming) in ar0230_s_stream()
1123 ret = __ar0230_start_stream(ar0230); in ar0230_s_stream()
1130 __ar0230_stop_stream(ar0230); in ar0230_s_stream()
1134 ar0230->streaming = on; in ar0230_s_stream()
1136 mutex_unlock(&ar0230->mutex); in ar0230_s_stream()
1144 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_g_frame_interval() local
1145 const struct ar0230_mode *mode = ar0230->cur_mode; in ar0230_g_frame_interval()
1154 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_s_power() local
1155 struct i2c_client *client = ar0230->client; in ar0230_s_power()
1158 mutex_lock(&ar0230->mutex); in ar0230_s_power()
1161 if (ar0230->power_on == !!on) in ar0230_s_power()
1171 ar0230->power_on = true; in ar0230_s_power()
1174 ar0230->power_on = false; in ar0230_s_power()
1178 mutex_unlock(&ar0230->mutex); in ar0230_s_power()
1189 static int __ar0230_power_on(struct ar0230 *ar0230) in __ar0230_power_on() argument
1193 struct device *dev = &ar0230->client->dev; in __ar0230_power_on()
1195 ret = clk_set_rate(ar0230->xvclk, AR0230_XVCLK_FREQ); in __ar0230_power_on()
1201 if (clk_get_rate(ar0230->xvclk) != AR0230_XVCLK_FREQ) in __ar0230_power_on()
1204 ret = clk_prepare_enable(ar0230->xvclk); in __ar0230_power_on()
1210 if (!IS_ERR(ar0230->reset_gpio)) in __ar0230_power_on()
1211 gpiod_set_value_cansleep(ar0230->reset_gpio, 0); in __ar0230_power_on()
1214 regulator_set_voltage(ar0230->supplies[i].consumer, in __ar0230_power_on()
1218 ret = regulator_bulk_enable(AR0230_NUM_SUPPLIES, ar0230->supplies); in __ar0230_power_on()
1224 if (!IS_ERR(ar0230->reset_gpio)) in __ar0230_power_on()
1225 gpiod_set_value_cansleep(ar0230->reset_gpio, 1); in __ar0230_power_on()
1227 if (!IS_ERR(ar0230->pwdn_gpio)) in __ar0230_power_on()
1228 gpiod_set_value_cansleep(ar0230->pwdn_gpio, 1); in __ar0230_power_on()
1237 clk_disable_unprepare(ar0230->xvclk); in __ar0230_power_on()
1242 static void __ar0230_power_off(struct ar0230 *ar0230) in __ar0230_power_off() argument
1244 if (!IS_ERR(ar0230->pwdn_gpio)) in __ar0230_power_off()
1245 gpiod_set_value_cansleep(ar0230->pwdn_gpio, 0); in __ar0230_power_off()
1246 clk_disable_unprepare(ar0230->xvclk); in __ar0230_power_off()
1247 if (!IS_ERR(ar0230->reset_gpio)) in __ar0230_power_off()
1248 gpiod_set_value_cansleep(ar0230->reset_gpio, 0); in __ar0230_power_off()
1249 regulator_bulk_disable(AR0230_NUM_SUPPLIES, ar0230->supplies); in __ar0230_power_off()
1256 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_runtime_resume() local
1258 return __ar0230_power_on(ar0230); in ar0230_runtime_resume()
1265 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_runtime_suspend() local
1267 __ar0230_power_off(ar0230); in ar0230_runtime_suspend()
1275 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_open() local
1280 mutex_lock(&ar0230->mutex); in ar0230_open()
1286 mutex_unlock(&ar0230->mutex); in ar0230_open()
1356 static int ar0230_set_gain(struct ar0230 *ar0230, int gain) in ar0230_set_gain() argument
1365 ret = ar0230_write_reg(ar0230->client, 0x3100, in ar0230_set_gain()
1367 ret |= ar0230_write_reg(ar0230->client, AR0230_REG_ANALOG_GAIN, in ar0230_set_gain()
1372 ret = ar0230_write_reg(ar0230->client, 0x3100, in ar0230_set_gain()
1374 ret |= ar0230_write_reg(ar0230->client, AR0230_REG_ANALOG_GAIN, in ar0230_set_gain()
1378 ret = ar0230_write_reg(ar0230->client, 0x3100, in ar0230_set_gain()
1380 ret |= ar0230_write_reg(ar0230->client, AR0230_REG_ANALOG_GAIN, in ar0230_set_gain()
1385 ret = ar0230_write_reg(ar0230->client, 0x3100, in ar0230_set_gain()
1387 ret |= ar0230_write_reg(ar0230->client, AR0230_REG_ANALOG_GAIN, in ar0230_set_gain()
1392 ret = ar0230_write_reg(ar0230->client, 0x3100, in ar0230_set_gain()
1394 ret |= ar0230_write_reg(ar0230->client, AR0230_REG_ANALOG_GAIN, in ar0230_set_gain()
1399 ret = ar0230_write_reg(ar0230->client, 0x3100, in ar0230_set_gain()
1401 ret |= ar0230_write_reg(ar0230->client, AR0230_REG_ANALOG_GAIN, in ar0230_set_gain()
1409 struct ar0230 *ar0230 = container_of(ctrl->handler, in ar0230_set_ctrl() local
1410 struct ar0230, ctrl_handler); in ar0230_set_ctrl()
1411 struct i2c_client *client = ar0230->client; in ar0230_set_ctrl()
1419 ret = ar0230_write_reg(ar0230->client, AR0230_REG_EXPOSURE, in ar0230_set_ctrl()
1423 ret = ar0230_set_gain(ar0230, ctrl->val); in ar0230_set_ctrl()
1426 ret = ar0230_write_reg(ar0230->client, AR0230_REG_VTS, in ar0230_set_ctrl()
1428 ctrl->val + ar0230->cur_mode->height); in ar0230_set_ctrl()
1431 ret = ar0230_enable_test_pattern(ar0230, ctrl->val); in ar0230_set_ctrl()
1448 static int ar0230_initialize_controls(struct ar0230 *ar0230) in ar0230_initialize_controls() argument
1456 handler = &ar0230->ctrl_handler; in ar0230_initialize_controls()
1457 mode = ar0230->cur_mode; in ar0230_initialize_controls()
1461 handler->lock = &ar0230->mutex; in ar0230_initialize_controls()
1467 ar0230->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ar0230_initialize_controls()
1469 if (ar0230->hblank) in ar0230_initialize_controls()
1470 ar0230->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ar0230_initialize_controls()
1473 ar0230->vblank = v4l2_ctrl_new_std(handler, &ar0230_ctrl_ops, in ar0230_initialize_controls()
1479 ar0230->exposure = v4l2_ctrl_new_std(handler, &ar0230_ctrl_ops, in ar0230_initialize_controls()
1484 ar0230->anal_gain = v4l2_ctrl_new_std(handler, &ar0230_ctrl_ops, in ar0230_initialize_controls()
1489 ar0230->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ar0230_initialize_controls()
1496 dev_err(&ar0230->client->dev, in ar0230_initialize_controls()
1501 ar0230->subdev.ctrl_handler = handler; in ar0230_initialize_controls()
1511 static int ar0230_check_sensor_id(struct ar0230 *ar0230, in ar0230_check_sensor_id() argument
1514 struct device *dev = &ar0230->client->dev; in ar0230_check_sensor_id()
1530 static int ar0230_configure_regulators(struct ar0230 *ar0230) in ar0230_configure_regulators() argument
1535 ar0230->supplies[i].supply = in ar0230_configure_regulators()
1538 return devm_regulator_bulk_get(&ar0230->client->dev, in ar0230_configure_regulators()
1540 ar0230->supplies); in ar0230_configure_regulators()
1548 struct ar0230 *ar0230; in ar0230_probe() local
1558 ar0230 = devm_kzalloc(dev, sizeof(*ar0230), GFP_KERNEL); in ar0230_probe()
1559 if (!ar0230) in ar0230_probe()
1563 &ar0230->module_index); in ar0230_probe()
1565 &ar0230->module_facing); in ar0230_probe()
1567 &ar0230->module_name); in ar0230_probe()
1569 &ar0230->len_name); in ar0230_probe()
1575 ar0230->client = client; in ar0230_probe()
1576 ar0230->cur_mode = &supported_modes[0]; in ar0230_probe()
1578 ar0230->xvclk = devm_clk_get(dev, "xvclk"); in ar0230_probe()
1579 if (IS_ERR(ar0230->xvclk)) { in ar0230_probe()
1584 ar0230->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ar0230_probe()
1585 if (IS_ERR(ar0230->reset_gpio)) in ar0230_probe()
1588 ar0230->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ar0230_probe()
1589 if (IS_ERR(ar0230->pwdn_gpio)) in ar0230_probe()
1592 ret = ar0230_configure_regulators(ar0230); in ar0230_probe()
1598 mutex_init(&ar0230->mutex); in ar0230_probe()
1600 sd = &ar0230->subdev; in ar0230_probe()
1602 ret = ar0230_initialize_controls(ar0230); in ar0230_probe()
1606 ret = __ar0230_power_on(ar0230); in ar0230_probe()
1610 ret = ar0230_check_sensor_id(ar0230, client); in ar0230_probe()
1620 ar0230->pad.flags = MEDIA_PAD_FL_SOURCE; in ar0230_probe()
1622 ret = media_entity_pads_init(&sd->entity, 1, &ar0230->pad); in ar0230_probe()
1628 if (strcmp(ar0230->module_facing, "back") == 0) in ar0230_probe()
1634 ar0230->module_index, facing, in ar0230_probe()
1653 __ar0230_power_off(ar0230); in ar0230_probe()
1655 v4l2_ctrl_handler_free(&ar0230->ctrl_handler); in ar0230_probe()
1657 mutex_destroy(&ar0230->mutex); in ar0230_probe()
1665 struct ar0230 *ar0230 = to_ar0230(sd); in ar0230_remove() local
1671 v4l2_ctrl_handler_free(&ar0230->ctrl_handler); in ar0230_remove()
1672 mutex_destroy(&ar0230->mutex); in ar0230_remove()
1676 __ar0230_power_off(ar0230); in ar0230_remove()