imx274 781 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 784 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, imx274 790 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, imx274 792 drivers/media/i2c/imx274.c ret = imx274_set_exposure(imx274, ctrl->val); imx274 796 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, imx274 798 drivers/media/i2c/imx274.c ret = imx274_set_gain(imx274, ctrl); imx274 802 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, imx274 804 drivers/media/i2c/imx274.c ret = imx274_set_vflip(imx274, ctrl->val); imx274 808 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, imx274 810 drivers/media/i2c/imx274.c ret = imx274_set_test_pattern(imx274, ctrl->val); imx274 817 drivers/media/i2c/imx274.c static int imx274_binning_goodness(struct stimx274 *imx274, imx274 821 drivers/media/i2c/imx274.c struct device *dev = &imx274->client->dev; imx274 872 drivers/media/i2c/imx274.c static int __imx274_change_compose(struct stimx274 *imx274, imx274 879 drivers/media/i2c/imx274.c struct device *dev = &imx274->client->dev; imx274 890 drivers/media/i2c/imx274.c cur_crop = &imx274->crop; imx274 891 drivers/media/i2c/imx274.c tgt_fmt = &imx274->format; imx274 898 drivers/media/i2c/imx274.c imx274, imx274 913 drivers/media/i2c/imx274.c imx274->mode = best_mode; imx274 939 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 941 drivers/media/i2c/imx274.c mutex_lock(&imx274->lock); imx274 942 drivers/media/i2c/imx274.c fmt->format = imx274->format; imx274 943 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 962 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 965 drivers/media/i2c/imx274.c mutex_lock(&imx274->lock); imx274 967 drivers/media/i2c/imx274.c err = __imx274_change_compose(imx274, cfg, format->which, imx274 982 drivers/media/i2c/imx274.c imx274->format = *fmt; imx274 985 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 994 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 1014 drivers/media/i2c/imx274.c src_crop = &imx274->crop; imx274 1015 drivers/media/i2c/imx274.c src_fmt = &imx274->format; imx274 1018 drivers/media/i2c/imx274.c mutex_lock(&imx274->lock); imx274 1040 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 1045 drivers/media/i2c/imx274.c static int imx274_set_selection_crop(struct stimx274 *imx274, imx274 1085 drivers/media/i2c/imx274.c tgt_crop = &imx274->crop; imx274 1087 drivers/media/i2c/imx274.c mutex_lock(&imx274->lock); imx274 1097 drivers/media/i2c/imx274.c __imx274_change_compose(imx274, cfg, sel->which, imx274 1101 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 1110 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 1116 drivers/media/i2c/imx274.c return imx274_set_selection_crop(imx274, cfg, sel); imx274 1121 drivers/media/i2c/imx274.c mutex_lock(&imx274->lock); imx274 1122 drivers/media/i2c/imx274.c err = __imx274_change_compose(imx274, cfg, sel->which, imx274 1125 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 1142 drivers/media/i2c/imx274.c static int imx274_apply_trimming(struct stimx274 *imx274) imx274 1153 drivers/media/i2c/imx274.c h_start = imx274->crop.left + 12; imx274 1154 drivers/media/i2c/imx274.c h_end = h_start + imx274->crop.width; imx274 1159 drivers/media/i2c/imx274.c hmax = max_t(u32, 260, (imx274->crop.width) / 16 + 23); imx274 1162 drivers/media/i2c/imx274.c v_pos = imx274->ctrls.vflip->cur.val ? imx274 1163 drivers/media/i2c/imx274.c (-imx274->crop.top / 2) : (imx274->crop.top / 2); imx274 1164 drivers/media/i2c/imx274.c v_cut = (IMX274_MAX_HEIGHT - imx274->crop.height) / 2; imx274 1165 drivers/media/i2c/imx274.c write_v_size = imx274->crop.height + 22; imx274 1166 drivers/media/i2c/imx274.c y_out_size = imx274->crop.height + 14; imx274 1168 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_HMAX_REG_LSB, hmax, 2); imx274 1170 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_HTRIM_EN_REG, 1, 1); imx274 1172 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_HTRIM_START_REG_LSB, imx274 1175 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_HTRIM_END_REG_LSB, imx274 1178 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_VWIDCUTEN_REG, 1, 1); imx274 1180 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_VWIDCUT_REG_LSB, imx274 1183 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_VWINPOS_REG_LSB, imx274 1186 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_WRITE_VSIZE_REG_LSB, imx274 1189 drivers/media/i2c/imx274.c err = imx274_write_mbreg(imx274, IMX274_Y_OUT_SIZE_REG_LSB, imx274 1207 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 1209 drivers/media/i2c/imx274.c fi->interval = imx274->frame_interval; imx274 1210 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, "%s frame rate = %d / %d\n", imx274 1211 drivers/media/i2c/imx274.c __func__, imx274->frame_interval.numerator, imx274 1212 drivers/media/i2c/imx274.c imx274->frame_interval.denominator); imx274 1229 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 1230 drivers/media/i2c/imx274.c struct v4l2_ctrl *ctrl = imx274->ctrls.exposure; imx274 1234 drivers/media/i2c/imx274.c mutex_lock(&imx274->lock); imx274 1235 drivers/media/i2c/imx274.c ret = imx274_set_frame_interval(imx274, fi->interval); imx274 1247 drivers/media/i2c/imx274.c dev_err(&imx274->client->dev, imx274 1253 drivers/media/i2c/imx274.c imx274_set_exposure(imx274, ctrl->val); imx274 1255 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, "set frame interval to %uus\n", imx274 1261 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 1320 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 1323 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, "%s : %s, mode index = %td\n", __func__, imx274 1325 drivers/media/i2c/imx274.c imx274->mode - &imx274_modes[0]); imx274 1327 drivers/media/i2c/imx274.c mutex_lock(&imx274->lock); imx274 1331 drivers/media/i2c/imx274.c ret = imx274_mode_regs(imx274); imx274 1335 drivers/media/i2c/imx274.c ret = imx274_apply_trimming(imx274); imx274 1345 drivers/media/i2c/imx274.c ret = imx274_set_frame_interval(imx274, imx274 1346 drivers/media/i2c/imx274.c imx274->frame_interval); imx274 1351 drivers/media/i2c/imx274.c ret = __v4l2_ctrl_s_ctrl(imx274->ctrls.exposure, imx274 1352 drivers/media/i2c/imx274.c imx274->ctrls.exposure->val); imx274 1357 drivers/media/i2c/imx274.c ret = imx274_start_stream(imx274); imx274 1362 drivers/media/i2c/imx274.c ret = imx274_write_table(imx274, imx274_stop); imx274 1367 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 1368 drivers/media/i2c/imx274.c dev_dbg(&imx274->client->dev, "%s : Done\n", __func__); imx274 1372 drivers/media/i2c/imx274.c mutex_unlock(&imx274->lock); imx274 1373 drivers/media/i2c/imx274.c dev_err(&imx274->client->dev, "s_stream failed\n"); imx274 1827 drivers/media/i2c/imx274.c struct stimx274 *imx274; imx274 1831 drivers/media/i2c/imx274.c imx274 = devm_kzalloc(&client->dev, sizeof(*imx274), GFP_KERNEL); imx274 1832 drivers/media/i2c/imx274.c if (!imx274) imx274 1835 drivers/media/i2c/imx274.c mutex_init(&imx274->lock); imx274 1838 drivers/media/i2c/imx274.c imx274->mode = &imx274_modes[IMX274_DEFAULT_BINNING]; imx274 1839 drivers/media/i2c/imx274.c imx274->crop.width = IMX274_MAX_WIDTH; imx274 1840 drivers/media/i2c/imx274.c imx274->crop.height = IMX274_MAX_HEIGHT; imx274 1841 drivers/media/i2c/imx274.c imx274->format.width = imx274->crop.width / imx274->mode->bin_ratio; imx274 1842 drivers/media/i2c/imx274.c imx274->format.height = imx274->crop.height / imx274->mode->bin_ratio; imx274 1843 drivers/media/i2c/imx274.c imx274->format.field = V4L2_FIELD_NONE; imx274 1844 drivers/media/i2c/imx274.c imx274->format.code = MEDIA_BUS_FMT_SRGGB10_1X10; imx274 1845 drivers/media/i2c/imx274.c imx274->format.colorspace = V4L2_COLORSPACE_SRGB; imx274 1846 drivers/media/i2c/imx274.c imx274->frame_interval.numerator = 1; imx274 1847 drivers/media/i2c/imx274.c imx274->frame_interval.denominator = IMX274_DEF_FRAME_RATE; imx274 1850 drivers/media/i2c/imx274.c imx274->regmap = devm_regmap_init_i2c(client, &imx274_regmap_config); imx274 1851 drivers/media/i2c/imx274.c if (IS_ERR(imx274->regmap)) { imx274 1853 drivers/media/i2c/imx274.c "regmap init failed: %ld\n", PTR_ERR(imx274->regmap)); imx274 1859 drivers/media/i2c/imx274.c imx274->client = client; imx274 1860 drivers/media/i2c/imx274.c sd = &imx274->sd; imx274 1865 drivers/media/i2c/imx274.c imx274->pad.flags = MEDIA_PAD_FL_SOURCE; imx274 1867 drivers/media/i2c/imx274.c ret = media_entity_pads_init(&sd->entity, 1, &imx274->pad); imx274 1875 drivers/media/i2c/imx274.c imx274->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", imx274 1877 drivers/media/i2c/imx274.c if (IS_ERR(imx274->reset_gpio)) { imx274 1878 drivers/media/i2c/imx274.c if (PTR_ERR(imx274->reset_gpio) != -EPROBE_DEFER) imx274 1880 drivers/media/i2c/imx274.c ret = PTR_ERR(imx274->reset_gpio); imx274 1885 drivers/media/i2c/imx274.c imx274_reset(imx274, 1); imx274 1888 drivers/media/i2c/imx274.c ret = v4l2_ctrl_handler_init(&imx274->ctrls.handler, 4); imx274 1895 drivers/media/i2c/imx274.c imx274->ctrls.handler.lock = &imx274->lock; imx274 1898 drivers/media/i2c/imx274.c imx274->ctrls.test_pattern = v4l2_ctrl_new_std_menu_items( imx274 1899 drivers/media/i2c/imx274.c &imx274->ctrls.handler, &imx274_ctrl_ops, imx274 1903 drivers/media/i2c/imx274.c imx274->ctrls.gain = v4l2_ctrl_new_std( imx274 1904 drivers/media/i2c/imx274.c &imx274->ctrls.handler, imx274 1910 drivers/media/i2c/imx274.c imx274->ctrls.exposure = v4l2_ctrl_new_std( imx274 1911 drivers/media/i2c/imx274.c &imx274->ctrls.handler, imx274 1917 drivers/media/i2c/imx274.c imx274->ctrls.vflip = v4l2_ctrl_new_std( imx274 1918 drivers/media/i2c/imx274.c &imx274->ctrls.handler, imx274 1922 drivers/media/i2c/imx274.c imx274->sd.ctrl_handler = &imx274->ctrls.handler; imx274 1923 drivers/media/i2c/imx274.c if (imx274->ctrls.handler.error) { imx274 1924 drivers/media/i2c/imx274.c ret = imx274->ctrls.handler.error; imx274 1929 drivers/media/i2c/imx274.c ret = v4l2_ctrl_handler_setup(&imx274->ctrls.handler); imx274 1937 drivers/media/i2c/imx274.c ret = imx274_load_default(imx274); imx274 1958 drivers/media/i2c/imx274.c v4l2_ctrl_handler_free(&imx274->ctrls.handler); imx274 1962 drivers/media/i2c/imx274.c mutex_destroy(&imx274->lock); imx274 1969 drivers/media/i2c/imx274.c struct stimx274 *imx274 = to_imx274(sd); imx274 1972 drivers/media/i2c/imx274.c imx274_write_table(imx274, imx274_stop); imx274 1975 drivers/media/i2c/imx274.c v4l2_ctrl_handler_free(&imx274->ctrls.handler); imx274 1977 drivers/media/i2c/imx274.c mutex_destroy(&imx274->lock);