Lines Matching refs:imx307
158 struct imx307 { struct
201 #define to_imx307(sd) container_of(sd, struct imx307, subdev) argument
1023 imx307_find_best_fit(struct imx307 *imx307, struct v4l2_subdev_format *fmt) in imx307_find_best_fit() argument
1031 for (i = 0; i < imx307->support_modes_num; i++) { in imx307_find_best_fit()
1032 dist = imx307_get_reso_dist(&imx307->support_modes[i], framefmt); in imx307_find_best_fit()
1038 return &imx307->support_modes[cur_best_fit]; in imx307_find_best_fit()
1045 struct imx307 *imx307 = to_imx307(sd); in imx307_set_fmt() local
1051 mutex_lock(&imx307->mutex); in imx307_set_fmt()
1053 mode = imx307_find_best_fit(imx307, fmt); in imx307_set_fmt()
1062 mutex_unlock(&imx307->mutex); in imx307_set_fmt()
1066 imx307->cur_mode = mode; in imx307_set_fmt()
1068 __v4l2_ctrl_modify_range(imx307->hblank, h_blank, in imx307_set_fmt()
1071 __v4l2_ctrl_modify_range(imx307->vblank, vblank_def, in imx307_set_fmt()
1076 __v4l2_ctrl_s_ctrl_int64(imx307->pixel_rate, in imx307_set_fmt()
1078 __v4l2_ctrl_s_ctrl(imx307->link_freq, in imx307_set_fmt()
1080 imx307->cur_vts = mode->vts_def; in imx307_set_fmt()
1083 mutex_unlock(&imx307->mutex); in imx307_set_fmt()
1092 struct imx307 *imx307 = to_imx307(sd); in imx307_get_fmt() local
1093 const struct imx307_mode *mode = imx307->cur_mode; in imx307_get_fmt()
1095 mutex_lock(&imx307->mutex); in imx307_get_fmt()
1100 mutex_unlock(&imx307->mutex); in imx307_get_fmt()
1109 mutex_unlock(&imx307->mutex); in imx307_get_fmt()
1117 struct imx307 *imx307 = to_imx307(sd); in imx307_enum_mbus_code() local
1118 const struct imx307_mode *mode = imx307->cur_mode; in imx307_enum_mbus_code()
1131 struct imx307 *imx307 = to_imx307(sd); in imx307_enum_frame_sizes() local
1133 if (fse->index >= imx307->support_modes_num) in imx307_enum_frame_sizes()
1136 if (fse->code != imx307->support_modes[fse->index].bus_fmt) in imx307_enum_frame_sizes()
1139 fse->min_width = imx307->support_modes[fse->index].width; in imx307_enum_frame_sizes()
1140 fse->max_width = imx307->support_modes[fse->index].width; in imx307_enum_frame_sizes()
1141 fse->max_height = imx307->support_modes[fse->index].height; in imx307_enum_frame_sizes()
1142 fse->min_height = imx307->support_modes[fse->index].height; in imx307_enum_frame_sizes()
1148 static int imx307_enable_test_pattern(struct imx307 *imx307, u32 pattern) in imx307_enable_test_pattern() argument
1152 imx307_read_reg(imx307->client, in imx307_enable_test_pattern()
1158 imx307_write_reg(imx307->client, in imx307_enable_test_pattern()
1162 imx307_write_reg(imx307->client, in imx307_enable_test_pattern()
1168 imx307_write_reg(imx307->client, in imx307_enable_test_pattern()
1172 imx307_write_reg(imx307->client, in imx307_enable_test_pattern()
1177 return imx307_write_reg(imx307->client, in imx307_enable_test_pattern()
1187 struct imx307 *imx307 = to_imx307(sd); in imx307_g_frame_interval() local
1188 const struct imx307_mode *mode = imx307->cur_mode; in imx307_g_frame_interval()
1198 struct imx307 *imx307 = to_imx307(sd); in imx307_g_mbus_config() local
1201 val = 1 << (imx307->cur_mode->lanes - 1) | in imx307_g_mbus_config()
1204 config->type = imx307->bus_cfg.bus_type; in imx307_g_mbus_config()
1210 static int imx307_set_hdrae(struct imx307 *imx307, in imx307_set_hdrae() argument
1219 u32 fsc = imx307->cur_vts;//The HDR mode vts is double by default to workaround T-line in imx307_set_hdrae()
1221 if (!imx307->has_init_exp && !imx307->streaming) { in imx307_set_hdrae()
1222 imx307->init_hdrae_exp = *ae; in imx307_set_hdrae()
1223 imx307->has_init_exp = true; in imx307_set_hdrae()
1224 dev_dbg(&imx307->client->dev, "imx307 don't stream, record exp for hdr!\n"); in imx307_set_hdrae()
1235 if (imx307->cur_mode->hdr_mode == HDR_X2) { in imx307_set_hdrae()
1241 dev_dbg(&imx307->client->dev, in imx307_set_hdrae()
1245 ret = imx307_read_reg(imx307->client, IMX307_GAIN_SWITCH_REG, in imx307_set_hdrae()
1257 if (imx307->cur_mode->lanes == 2 && imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) in imx307_set_hdrae()
1270 ret |= imx307_write_reg(imx307->client, IMX307_REG_SHS1_L, in imx307_set_hdrae()
1273 ret |= imx307_write_reg(imx307->client, IMX307_REG_SHS1_M, in imx307_set_hdrae()
1276 ret |= imx307_write_reg(imx307->client, IMX307_REG_SHS1_H, in imx307_set_hdrae()
1279 ret |= imx307_write_reg(imx307->client, IMX307_REG_SHS2_L, in imx307_set_hdrae()
1282 ret |= imx307_write_reg(imx307->client, IMX307_REG_SHS2_M, in imx307_set_hdrae()
1285 ret |= imx307_write_reg(imx307->client, IMX307_REG_SHS2_H, in imx307_set_hdrae()
1289 ret |= imx307_write_reg(imx307->client, IMX307_REG_LF_GAIN, in imx307_set_hdrae()
1292 ret |= imx307_write_reg(imx307->client, IMX307_REG_SF_GAIN, in imx307_set_hdrae()
1296 ret |= imx307_write_reg(imx307->client, in imx307_set_hdrae()
1300 ret |= imx307_write_reg(imx307->client, IMX307_GAIN_SWITCH_REG, in imx307_set_hdrae()
1302 ret |= imx307_write_reg(imx307->client, in imx307_set_hdrae()
1307 dev_dbg(&imx307->client->dev, in imx307_set_hdrae()
1313 static void imx307_get_module_inf(struct imx307 *imx307, in imx307_get_module_inf() argument
1318 strlcpy(inf->base.module, imx307->module_name, in imx307_get_module_inf()
1320 strlcpy(inf->base.lens, imx307->len_name, sizeof(inf->base.lens)); in imx307_get_module_inf()
1323 static int imx307_set_conversion_gain(struct imx307 *imx307, u32 *cg) in imx307_set_conversion_gain() argument
1326 struct i2c_client *client = imx307->client; in imx307_set_conversion_gain()
1371 struct imx307 *imx307 = to_imx307(sd); in set_conversion_gain_status() local
1377 imx307_set_conversion_gain(imx307, &status); in set_conversion_gain_status()
1405 struct imx307 *imx307 = to_imx307(sd); in imx307_ioctl() local
1417 imx307_get_module_inf(imx307, (struct rkmodule_inf *)arg); in imx307_ioctl()
1420 ret = imx307_set_hdrae(imx307, arg); in imx307_ioctl()
1424 if (imx307->cur_mode->hdr_mode == NO_HDR) in imx307_ioctl()
1428 hdr->hdr_mode = imx307->cur_mode->hdr_mode; in imx307_ioctl()
1432 for (i = 0; i < imx307->support_modes_num; i++) { in imx307_ioctl()
1433 if (imx307->support_modes[i].hdr_mode == hdr->hdr_mode) { in imx307_ioctl()
1434 imx307->cur_mode = &imx307->support_modes[i]; in imx307_ioctl()
1438 if (i == imx307->support_modes_num) { in imx307_ioctl()
1439 dev_err(&imx307->client->dev, in imx307_ioctl()
1444 mode = imx307->cur_mode; in imx307_ioctl()
1447 __v4l2_ctrl_modify_range(imx307->hblank, w, w, 1, w); in imx307_ioctl()
1448 __v4l2_ctrl_modify_range(imx307->vblank, h, in imx307_ioctl()
1453 __v4l2_ctrl_s_ctrl_int64(imx307->pixel_rate, in imx307_ioctl()
1455 __v4l2_ctrl_s_ctrl(imx307->link_freq, in imx307_ioctl()
1457 imx307->cur_vts = mode->vts_def; in imx307_ioctl()
1461 ret = imx307_set_conversion_gain(imx307, (u32 *)arg); in imx307_ioctl()
1465 if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) in imx307_ioctl()
1466 memcpy(lvds_cfg, &imx307->cur_mode->lvds_cfg, in imx307_ioctl()
1476 ret = imx307_write_reg(imx307->client, in imx307_ioctl()
1481 ret = imx307_write_reg(imx307->client, in imx307_ioctl()
1585 static int imx307_init_conversion_gain(struct imx307 *imx307) in imx307_init_conversion_gain() argument
1588 struct i2c_client *client = imx307->client; in imx307_init_conversion_gain()
1605 static int __imx307_start_stream(struct imx307 *imx307) in __imx307_start_stream() argument
1609 ret = imx307_write_array(imx307->client, imx307->cur_mode->reg_list); in __imx307_start_stream()
1612 ret = imx307_init_conversion_gain(imx307); in __imx307_start_stream()
1616 ret = __v4l2_ctrl_handler_setup(&imx307->ctrl_handler); in __imx307_start_stream()
1619 if (imx307->has_init_exp && imx307->cur_mode->hdr_mode != NO_HDR) { in __imx307_start_stream()
1620 ret = imx307_ioctl(&imx307->subdev, PREISP_CMD_SET_HDRAE_EXP, in __imx307_start_stream()
1621 &imx307->init_hdrae_exp); in __imx307_start_stream()
1623 dev_err(&imx307->client->dev, in __imx307_start_stream()
1629 ret = imx307_write_reg(imx307->client, in __imx307_start_stream()
1636 static int __imx307_stop_stream(struct imx307 *imx307) in __imx307_stop_stream() argument
1638 return imx307_write_reg(imx307->client, in __imx307_stop_stream()
1646 struct imx307 *imx307 = to_imx307(sd); in imx307_s_stream() local
1647 struct i2c_client *client = imx307->client; in imx307_s_stream()
1650 mutex_lock(&imx307->mutex); in imx307_s_stream()
1652 if (on == imx307->streaming) in imx307_s_stream()
1662 ret = __imx307_start_stream(imx307); in imx307_s_stream()
1669 __imx307_stop_stream(imx307); in imx307_s_stream()
1673 imx307->streaming = on; in imx307_s_stream()
1676 mutex_unlock(&imx307->mutex); in imx307_s_stream()
1683 struct imx307 *imx307 = to_imx307(sd); in imx307_s_power() local
1684 struct i2c_client *client = imx307->client; in imx307_s_power()
1687 mutex_lock(&imx307->mutex); in imx307_s_power()
1690 if (imx307->power_on == !!on) in imx307_s_power()
1700 ret = imx307_write_array(imx307->client, imx307_global_regs); in imx307_s_power()
1707 imx307->power_on = true; in imx307_s_power()
1710 imx307->power_on = false; in imx307_s_power()
1714 mutex_unlock(&imx307->mutex); in imx307_s_power()
1725 static int __imx307_power_on(struct imx307 *imx307) in __imx307_power_on() argument
1729 struct device *dev = &imx307->client->dev; in __imx307_power_on()
1731 if (!IS_ERR_OR_NULL(imx307->pins_default)) { in __imx307_power_on()
1732 ret = pinctrl_select_state(imx307->pinctrl, in __imx307_power_on()
1733 imx307->pins_default); in __imx307_power_on()
1738 ret = clk_set_rate(imx307->xvclk, IMX307_XVCLK_FREQ); in __imx307_power_on()
1742 if (clk_get_rate(imx307->xvclk) != IMX307_XVCLK_FREQ) in __imx307_power_on()
1745 ret = clk_prepare_enable(imx307->xvclk); in __imx307_power_on()
1752 ret = regulator_bulk_enable(IMX307_NUM_SUPPLIES, imx307->supplies); in __imx307_power_on()
1758 if (!IS_ERR(imx307->reset_gpio)) in __imx307_power_on()
1759 gpiod_set_value_cansleep(imx307->reset_gpio, 0); in __imx307_power_on()
1761 if (!IS_ERR(imx307->reset_gpio)) in __imx307_power_on()
1762 gpiod_set_value_cansleep(imx307->reset_gpio, 1); in __imx307_power_on()
1764 if (!IS_ERR(imx307->pwdn_gpio)) in __imx307_power_on()
1765 gpiod_set_value_cansleep(imx307->pwdn_gpio, 1); in __imx307_power_on()
1774 clk_disable_unprepare(imx307->xvclk); in __imx307_power_on()
1779 static void __imx307_power_off(struct imx307 *imx307) in __imx307_power_off() argument
1782 struct device *dev = &imx307->client->dev; in __imx307_power_off()
1784 if (!IS_ERR(imx307->pwdn_gpio)) in __imx307_power_off()
1785 gpiod_set_value_cansleep(imx307->pwdn_gpio, 0); in __imx307_power_off()
1786 clk_disable_unprepare(imx307->xvclk); in __imx307_power_off()
1787 if (!IS_ERR(imx307->reset_gpio)) in __imx307_power_off()
1788 gpiod_set_value_cansleep(imx307->reset_gpio, 0); in __imx307_power_off()
1789 if (!IS_ERR_OR_NULL(imx307->pins_sleep)) { in __imx307_power_off()
1790 ret = pinctrl_select_state(imx307->pinctrl, in __imx307_power_off()
1791 imx307->pins_sleep); in __imx307_power_off()
1795 regulator_bulk_disable(IMX307_NUM_SUPPLIES, imx307->supplies); in __imx307_power_off()
1802 struct imx307 *imx307 = to_imx307(sd); in imx307_runtime_resume() local
1804 return __imx307_power_on(imx307); in imx307_runtime_resume()
1811 struct imx307 *imx307 = to_imx307(sd); in imx307_runtime_suspend() local
1813 __imx307_power_off(imx307); in imx307_runtime_suspend()
1821 struct imx307 *imx307 = to_imx307(sd); in imx307_open() local
1824 const struct imx307_mode *def_mode = &imx307->support_modes[0]; in imx307_open()
1826 mutex_lock(&imx307->mutex); in imx307_open()
1833 mutex_unlock(&imx307->mutex); in imx307_open()
1844 struct imx307 *imx307 = to_imx307(sd); in imx307_enum_frame_interval() local
1846 if (fie->index >= imx307->support_modes_num) in imx307_enum_frame_interval()
1849 fie->code = imx307->support_modes[fie->index].bus_fmt; in imx307_enum_frame_interval()
1850 fie->width = imx307->support_modes[fie->index].width; in imx307_enum_frame_interval()
1851 fie->height = imx307->support_modes[fie->index].height; in imx307_enum_frame_interval()
1852 fie->interval = imx307->support_modes[fie->index].max_fps; in imx307_enum_frame_interval()
1853 fie->reserved[0] = imx307->support_modes[fie->index].hdr_mode; in imx307_enum_frame_interval()
1875 struct imx307 *imx307 = to_imx307(sd); in imx307_get_selection() local
1878 sel->r.left = CROP_START(imx307->cur_mode->width, DST_WIDTH); in imx307_get_selection()
1880 if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) { in imx307_get_selection()
1881 if (imx307->cur_mode->hdr_mode == NO_HDR) in imx307_get_selection()
1886 sel->r.top = CROP_START(imx307->cur_mode->height, DST_HEIGHT); in imx307_get_selection()
1936 struct imx307 *imx307 = container_of(ctrl->handler, in imx307_set_ctrl() local
1937 struct imx307, ctrl_handler); in imx307_set_ctrl()
1938 struct i2c_client *client = imx307->client; in imx307_set_ctrl()
1949 max = imx307->cur_mode->height + ctrl->val - 2; in imx307_set_ctrl()
1950 __v4l2_ctrl_modify_range(imx307->exposure, in imx307_set_ctrl()
1951 imx307->exposure->minimum, max, in imx307_set_ctrl()
1952 imx307->exposure->step, in imx307_set_ctrl()
1953 imx307->exposure->default_value); in imx307_set_ctrl()
1962 if (imx307->cur_mode->hdr_mode == NO_HDR) { in imx307_set_ctrl()
1963 shs1 = imx307->cur_vts - (ctrl->val + 1); in imx307_set_ctrl()
1964 ret = imx307_write_reg(imx307->client, in imx307_set_ctrl()
1968 ret |= imx307_write_reg(imx307->client, in imx307_set_ctrl()
1972 ret |= imx307_write_reg(imx307->client, in imx307_set_ctrl()
1977 ctrl->val, imx307->cur_vts, shs1); in imx307_set_ctrl()
1981 if (imx307->cur_mode->hdr_mode == NO_HDR) { in imx307_set_ctrl()
1982 ret = imx307_write_reg(imx307->client, in imx307_set_ctrl()
1991 vts = ctrl->val + imx307->cur_mode->height; in imx307_set_ctrl()
1992 imx307->cur_vts = vts; in imx307_set_ctrl()
1993 if (imx307->cur_mode->hdr_mode == HDR_X2) in imx307_set_ctrl()
1995 ret = imx307_write_reg(imx307->client, in imx307_set_ctrl()
1999 ret |= imx307_write_reg(imx307->client, in imx307_set_ctrl()
2003 ret |= imx307_write_reg(imx307->client, in imx307_set_ctrl()
2012 ret = imx307_enable_test_pattern(imx307, ctrl->val); in imx307_set_ctrl()
2029 imx307->flip = val; in imx307_set_ctrl()
2045 imx307->flip = val; in imx307_set_ctrl()
2062 static int imx307_initialize_controls(struct imx307 *imx307) in imx307_initialize_controls() argument
2072 handler = &imx307->ctrl_handler; in imx307_initialize_controls()
2073 mode = imx307->cur_mode; in imx307_initialize_controls()
2077 handler->lock = &imx307->mutex; in imx307_initialize_controls()
2079 imx307->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, V4L2_CID_LINK_FREQ, in imx307_initialize_controls()
2084 __v4l2_ctrl_s_ctrl(imx307->link_freq, in imx307_initialize_controls()
2086 imx307->pixel_rate = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_PIXEL_RATE, in imx307_initialize_controls()
2091 imx307->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in imx307_initialize_controls()
2093 if (imx307->hblank) in imx307_initialize_controls()
2094 imx307->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in imx307_initialize_controls()
2097 imx307->cur_vts = mode->vts_def; in imx307_initialize_controls()
2098 imx307->vblank = v4l2_ctrl_new_std(handler, &imx307_ctrl_ops, in imx307_initialize_controls()
2105 imx307->exposure = v4l2_ctrl_new_std(handler, &imx307_ctrl_ops, in imx307_initialize_controls()
2110 imx307->anal_gain = v4l2_ctrl_new_std(handler, &imx307_ctrl_ops, in imx307_initialize_controls()
2116 imx307->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in imx307_initialize_controls()
2121 imx307->h_flip = v4l2_ctrl_new_std(handler, &imx307_ctrl_ops, in imx307_initialize_controls()
2124 imx307->v_flip = v4l2_ctrl_new_std(handler, &imx307_ctrl_ops, in imx307_initialize_controls()
2126 imx307->flip = 0; in imx307_initialize_controls()
2129 dev_err(&imx307->client->dev, in imx307_initialize_controls()
2134 imx307->subdev.ctrl_handler = handler; in imx307_initialize_controls()
2135 imx307->has_init_exp = false; in imx307_initialize_controls()
2145 static int imx307_check_sensor_id(struct imx307 *imx307, in imx307_check_sensor_id() argument
2148 struct device *dev = &imx307->client->dev; in imx307_check_sensor_id()
2162 static int imx307_configure_regulators(struct imx307 *imx307) in imx307_configure_regulators() argument
2167 imx307->supplies[i].supply = imx307_supply_names[i]; in imx307_configure_regulators()
2169 return devm_regulator_bulk_get(&imx307->client->dev, in imx307_configure_regulators()
2171 imx307->supplies); in imx307_configure_regulators()
2179 struct imx307 *imx307; in imx307_probe() local
2190 imx307 = devm_kzalloc(dev, sizeof(*imx307), GFP_KERNEL); in imx307_probe()
2191 if (!imx307) in imx307_probe()
2195 &imx307->module_index); in imx307_probe()
2197 &imx307->module_facing); in imx307_probe()
2199 &imx307->module_name); in imx307_probe()
2201 &imx307->len_name); in imx307_probe()
2213 &imx307->bus_cfg); in imx307_probe()
2216 if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) { in imx307_probe()
2217 if (imx307->bus_cfg.bus.mipi_csi1.data_lane == 2) { in imx307_probe()
2218 imx307->support_modes = lvds_2lane_supported_modes; in imx307_probe()
2219 imx307->support_modes_num = ARRAY_SIZE(lvds_2lane_supported_modes); in imx307_probe()
2220 } else if (imx307->bus_cfg.bus.mipi_csi1.data_lane == 4) { in imx307_probe()
2221 imx307->support_modes = lvds_supported_modes; in imx307_probe()
2222 imx307->support_modes_num = ARRAY_SIZE(lvds_supported_modes); in imx307_probe()
2227 imx307->support_modes = mipi_supported_modes; in imx307_probe()
2228 imx307->support_modes_num = ARRAY_SIZE(mipi_supported_modes); in imx307_probe()
2230 imx307->client = client; in imx307_probe()
2231 imx307->cur_mode = &imx307->support_modes[0]; in imx307_probe()
2233 imx307->xvclk = devm_clk_get(dev, "xvclk"); in imx307_probe()
2234 if (IS_ERR(imx307->xvclk)) { in imx307_probe()
2239 imx307->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in imx307_probe()
2240 if (IS_ERR(imx307->reset_gpio)) in imx307_probe()
2243 imx307->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in imx307_probe()
2244 if (IS_ERR(imx307->pwdn_gpio)) in imx307_probe()
2247 ret = imx307_configure_regulators(imx307); in imx307_probe()
2253 imx307->pinctrl = devm_pinctrl_get(dev); in imx307_probe()
2254 if (!IS_ERR(imx307->pinctrl)) { in imx307_probe()
2255 imx307->pins_default = in imx307_probe()
2256 pinctrl_lookup_state(imx307->pinctrl, in imx307_probe()
2258 if (IS_ERR(imx307->pins_default)) in imx307_probe()
2261 imx307->pins_sleep = in imx307_probe()
2262 pinctrl_lookup_state(imx307->pinctrl, in imx307_probe()
2264 if (IS_ERR(imx307->pins_sleep)) in imx307_probe()
2268 mutex_init(&imx307->mutex); in imx307_probe()
2270 sd = &imx307->subdev; in imx307_probe()
2272 ret = imx307_initialize_controls(imx307); in imx307_probe()
2276 ret = __imx307_power_on(imx307); in imx307_probe()
2280 ret = imx307_check_sensor_id(imx307, client); in imx307_probe()
2292 imx307->pad.flags = MEDIA_PAD_FL_SOURCE; in imx307_probe()
2294 ret = media_entity_pads_init(&sd->entity, 1, &imx307->pad); in imx307_probe()
2300 if (strcmp(imx307->module_facing, "back") == 0) in imx307_probe()
2306 imx307->module_index, facing, in imx307_probe()
2329 __imx307_power_off(imx307); in imx307_probe()
2331 v4l2_ctrl_handler_free(&imx307->ctrl_handler); in imx307_probe()
2333 mutex_destroy(&imx307->mutex); in imx307_probe()
2341 struct imx307 *imx307 = to_imx307(sd); in imx307_remove() local
2347 v4l2_ctrl_handler_free(&imx307->ctrl_handler); in imx307_remove()
2348 mutex_destroy(&imx307->mutex); in imx307_remove()
2352 __imx307_power_off(imx307); in imx307_remove()