Lines Matching +full:sd +full:- +full:hs
14 * Karicheri Muralidharan <m-karicheri2@ti.com>
33 #include <linux/v4l2-mediabus.h>
37 #include <media/v4l2-async.h>
38 #include <media/v4l2-device.h>
39 #include <media/v4l2-common.h>
40 #include <media/v4l2-mediabus.h>
41 #include <media/v4l2-fwnode.h>
42 #include <media/v4l2-ctrls.h>
44 #include <media/media-entity.h>
56 MODULE_PARM_DESC(debug, "Debug level (0-1)");
62 /* enum tvp514x_std - enum for supported standards */
70 * struct tvp514x_std_info - Structure to store standard informations
85 static int tvp514x_s_stream(struct v4l2_subdev *sd, int enable);
87 * struct tvp514x_decoder - TVP5146/47 decoder object
88 * @sd: Subdevice Slave handle
93 * @streaming: TVP5146/47 decoder streaming - enabled or disabled.
107 struct v4l2_subdev sd; member
201 /* HS, VS active high */
203 /* 10-bit BT.656 */
209 /* Enable VS & HS */
228 .description = "8-bit UYVY 4:2:2 Format",
234 * Supported standards -
270 static inline struct tvp514x_decoder *to_decoder(struct v4l2_subdev *sd) in to_decoder() argument
272 return container_of(sd, struct tvp514x_decoder, sd); in to_decoder()
277 return &container_of(ctrl->handler, struct tvp514x_decoder, hdl)->sd; in to_sd()
282 * tvp514x_read_reg() - Read a value from a register in an TVP5146/47.
283 * @sd: ptr to v4l2_subdev struct
286 * Returns value read if successful, or non-zero (-1) otherwise.
288 static int tvp514x_read_reg(struct v4l2_subdev *sd, u8 reg) in tvp514x_read_reg() argument
291 struct i2c_client *client = v4l2_get_subdevdata(sd); in tvp514x_read_reg()
298 v4l2_warn(sd, "Read: retry ... %d\n", retry); in tvp514x_read_reg()
309 * dump_reg() - dump the register content of TVP5146/47.
310 * @sd: ptr to v4l2_subdev struct
313 static void dump_reg(struct v4l2_subdev *sd, u8 reg) in dump_reg() argument
317 val = tvp514x_read_reg(sd, reg); in dump_reg()
318 v4l2_info(sd, "Reg(0x%.2X): 0x%.2X\n", reg, val); in dump_reg()
322 * tvp514x_write_reg() - Write a value to a register in TVP5146/47
323 * @sd: ptr to v4l2_subdev struct
328 * Returns zero if successful, or non-zero otherwise.
330 static int tvp514x_write_reg(struct v4l2_subdev *sd, u8 reg, u8 val) in tvp514x_write_reg() argument
333 struct i2c_client *client = v4l2_get_subdevdata(sd); in tvp514x_write_reg()
340 v4l2_warn(sd, "Write: retry ... %d\n", retry); in tvp514x_write_reg()
352 * @sd: ptr to v4l2_subdev struct
355 * Initializes a list of TVP5146/47 registers:-
360 * Returns zero if successful, or non-zero otherwise.
362 static int tvp514x_write_regs(struct v4l2_subdev *sd, in tvp514x_write_regs() argument
368 for (; next->token != TOK_TERM; next++) { in tvp514x_write_regs()
369 if (next->token == TOK_DELAY) { in tvp514x_write_regs()
370 msleep(next->val); in tvp514x_write_regs()
374 if (next->token == TOK_SKIP) in tvp514x_write_regs()
377 err = tvp514x_write_reg(sd, next->reg, (u8) next->val); in tvp514x_write_regs()
379 v4l2_err(sd, "Write failed. Err[%d]\n", err); in tvp514x_write_regs()
388 * @sd: ptr to v4l2_subdev struct
393 static enum tvp514x_std tvp514x_query_current_std(struct v4l2_subdev *sd) in tvp514x_query_current_std() argument
397 std = tvp514x_read_reg(sd, REG_VIDEO_STD); in tvp514x_query_current_std()
400 std_status = tvp514x_read_reg(sd, REG_VIDEO_STD_STATUS); in tvp514x_query_current_std()
420 static void tvp514x_reg_dump(struct v4l2_subdev *sd) in tvp514x_reg_dump() argument
422 dump_reg(sd, REG_INPUT_SEL); in tvp514x_reg_dump()
423 dump_reg(sd, REG_AFE_GAIN_CTRL); in tvp514x_reg_dump()
424 dump_reg(sd, REG_VIDEO_STD); in tvp514x_reg_dump()
425 dump_reg(sd, REG_OPERATION_MODE); in tvp514x_reg_dump()
426 dump_reg(sd, REG_COLOR_KILLER); in tvp514x_reg_dump()
427 dump_reg(sd, REG_LUMA_CONTROL1); in tvp514x_reg_dump()
428 dump_reg(sd, REG_LUMA_CONTROL2); in tvp514x_reg_dump()
429 dump_reg(sd, REG_LUMA_CONTROL3); in tvp514x_reg_dump()
430 dump_reg(sd, REG_BRIGHTNESS); in tvp514x_reg_dump()
431 dump_reg(sd, REG_CONTRAST); in tvp514x_reg_dump()
432 dump_reg(sd, REG_SATURATION); in tvp514x_reg_dump()
433 dump_reg(sd, REG_HUE); in tvp514x_reg_dump()
434 dump_reg(sd, REG_CHROMA_CONTROL1); in tvp514x_reg_dump()
435 dump_reg(sd, REG_CHROMA_CONTROL2); in tvp514x_reg_dump()
436 dump_reg(sd, REG_COMP_PR_SATURATION); in tvp514x_reg_dump()
437 dump_reg(sd, REG_COMP_Y_CONTRAST); in tvp514x_reg_dump()
438 dump_reg(sd, REG_COMP_PB_SATURATION); in tvp514x_reg_dump()
439 dump_reg(sd, REG_COMP_Y_BRIGHTNESS); in tvp514x_reg_dump()
440 dump_reg(sd, REG_AVID_START_PIXEL_LSB); in tvp514x_reg_dump()
441 dump_reg(sd, REG_AVID_START_PIXEL_MSB); in tvp514x_reg_dump()
442 dump_reg(sd, REG_AVID_STOP_PIXEL_LSB); in tvp514x_reg_dump()
443 dump_reg(sd, REG_AVID_STOP_PIXEL_MSB); in tvp514x_reg_dump()
444 dump_reg(sd, REG_HSYNC_START_PIXEL_LSB); in tvp514x_reg_dump()
445 dump_reg(sd, REG_HSYNC_START_PIXEL_MSB); in tvp514x_reg_dump()
446 dump_reg(sd, REG_HSYNC_STOP_PIXEL_LSB); in tvp514x_reg_dump()
447 dump_reg(sd, REG_HSYNC_STOP_PIXEL_MSB); in tvp514x_reg_dump()
448 dump_reg(sd, REG_VSYNC_START_LINE_LSB); in tvp514x_reg_dump()
449 dump_reg(sd, REG_VSYNC_START_LINE_MSB); in tvp514x_reg_dump()
450 dump_reg(sd, REG_VSYNC_STOP_LINE_LSB); in tvp514x_reg_dump()
451 dump_reg(sd, REG_VSYNC_STOP_LINE_MSB); in tvp514x_reg_dump()
452 dump_reg(sd, REG_VBLK_START_LINE_LSB); in tvp514x_reg_dump()
453 dump_reg(sd, REG_VBLK_START_LINE_MSB); in tvp514x_reg_dump()
454 dump_reg(sd, REG_VBLK_STOP_LINE_LSB); in tvp514x_reg_dump()
455 dump_reg(sd, REG_VBLK_STOP_LINE_MSB); in tvp514x_reg_dump()
456 dump_reg(sd, REG_SYNC_CONTROL); in tvp514x_reg_dump()
457 dump_reg(sd, REG_OUTPUT_FORMATTER1); in tvp514x_reg_dump()
458 dump_reg(sd, REG_OUTPUT_FORMATTER2); in tvp514x_reg_dump()
459 dump_reg(sd, REG_OUTPUT_FORMATTER3); in tvp514x_reg_dump()
460 dump_reg(sd, REG_OUTPUT_FORMATTER4); in tvp514x_reg_dump()
461 dump_reg(sd, REG_OUTPUT_FORMATTER5); in tvp514x_reg_dump()
462 dump_reg(sd, REG_OUTPUT_FORMATTER6); in tvp514x_reg_dump()
463 dump_reg(sd, REG_CLEAR_LOST_LOCK); in tvp514x_reg_dump()
467 * tvp514x_configure() - Configure the TVP5146/47 registers
468 * @sd: ptr to v4l2_subdev struct
471 * Returns zero if successful, or non-zero otherwise.
473 static int tvp514x_configure(struct v4l2_subdev *sd, in tvp514x_configure() argument
480 tvp514x_write_regs(sd, decoder->tvp514x_regs); in tvp514x_configure()
485 tvp514x_reg_dump(sd); in tvp514x_configure()
491 * tvp514x_detect() - Detect if an tvp514x is present, and if so which revision.
492 * @sd: pointer to standard V4L2 sub-device structure
501 static int tvp514x_detect(struct v4l2_subdev *sd, in tvp514x_detect() argument
505 struct i2c_client *client = v4l2_get_subdevdata(sd); in tvp514x_detect()
507 chip_id_msb = tvp514x_read_reg(sd, REG_CHIP_ID_MSB); in tvp514x_detect()
508 chip_id_lsb = tvp514x_read_reg(sd, REG_CHIP_ID_LSB); in tvp514x_detect()
509 rom_ver = tvp514x_read_reg(sd, REG_ROM_VERSION); in tvp514x_detect()
511 v4l2_dbg(1, debug, sd, in tvp514x_detect()
520 v4l2_err(sd, "chip id mismatch msb:0x%x lsb:0x%x\n", in tvp514x_detect()
522 return -ENODEV; in tvp514x_detect()
525 decoder->ver = rom_ver; in tvp514x_detect()
527 v4l2_info(sd, "%s (Version - 0x%.2x) found at 0x%x (%s)\n", in tvp514x_detect()
528 client->name, decoder->ver, in tvp514x_detect()
529 client->addr << 1, client->adapter->name); in tvp514x_detect()
534 * tvp514x_querystd() - V4L2 decoder interface handler for querystd
535 * @sd: pointer to standard V4L2 sub-device structure
541 static int tvp514x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std_id) in tvp514x_querystd() argument
543 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_querystd()
549 return -EINVAL; in tvp514x_querystd()
552 if (!decoder->streaming) { in tvp514x_querystd()
553 tvp514x_s_stream(sd, 1); in tvp514x_querystd()
558 current_std = tvp514x_query_current_std(sd); in tvp514x_querystd()
564 input_sel = decoder->input; in tvp514x_querystd()
599 return -EINVAL; in tvp514x_querystd()
602 sync_lock_status = tvp514x_read_reg(sd, REG_STATUS1); in tvp514x_querystd()
608 *std_id &= decoder->std_list[current_std].standard.id; in tvp514x_querystd()
610 v4l2_dbg(1, debug, sd, "Current STD: %s\n", in tvp514x_querystd()
611 decoder->std_list[current_std].standard.name); in tvp514x_querystd()
616 * tvp514x_s_std() - V4L2 decoder interface handler for s_std
617 * @sd: pointer to standard V4L2 sub-device structure
621 * -EINVAL
623 static int tvp514x_s_std(struct v4l2_subdev *sd, v4l2_std_id std_id) in tvp514x_s_std() argument
625 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_s_std()
628 for (i = 0; i < decoder->num_stds; i++) in tvp514x_s_std()
629 if (std_id & decoder->std_list[i].standard.id) in tvp514x_s_std()
632 if ((i == decoder->num_stds) || (i == STD_INVALID)) in tvp514x_s_std()
633 return -EINVAL; in tvp514x_s_std()
635 err = tvp514x_write_reg(sd, REG_VIDEO_STD, in tvp514x_s_std()
636 decoder->std_list[i].video_std); in tvp514x_s_std()
640 decoder->current_std = i; in tvp514x_s_std()
641 decoder->tvp514x_regs[REG_VIDEO_STD].val = in tvp514x_s_std()
642 decoder->std_list[i].video_std; in tvp514x_s_std()
644 v4l2_dbg(1, debug, sd, "Standard set to: %s\n", in tvp514x_s_std()
645 decoder->std_list[i].standard.name); in tvp514x_s_std()
650 * tvp514x_s_routing() - V4L2 decoder interface handler for s_routing
651 * @sd: pointer to standard V4L2 sub-device structure
656 * If index is valid, selects the requested input. Otherwise, returns -EINVAL if
660 static int tvp514x_s_routing(struct v4l2_subdev *sd, in tvp514x_s_routing() argument
663 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_s_routing()
671 return -EINVAL; in tvp514x_s_routing()
676 err = tvp514x_write_reg(sd, REG_INPUT_SEL, input_sel); in tvp514x_s_routing()
680 output_sel |= tvp514x_read_reg(sd, in tvp514x_s_routing()
682 err = tvp514x_write_reg(sd, REG_OUTPUT_FORMATTER1, in tvp514x_s_routing()
687 decoder->tvp514x_regs[REG_INPUT_SEL].val = input_sel; in tvp514x_s_routing()
688 decoder->tvp514x_regs[REG_OUTPUT_FORMATTER1].val = output_sel; in tvp514x_s_routing()
689 decoder->input = input; in tvp514x_s_routing()
690 decoder->output = output; in tvp514x_s_routing()
692 v4l2_dbg(1, debug, sd, "Input set to: %d\n", input_sel); in tvp514x_s_routing()
698 * tvp514x_s_ctrl() - V4L2 decoder interface handler for s_ctrl
702 * value in HW. Otherwise, returns -EINVAL if the control is not supported.
706 struct v4l2_subdev *sd = to_sd(ctrl); in tvp514x_s_ctrl() local
707 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_s_ctrl()
708 int err = -EINVAL, value; in tvp514x_s_ctrl()
710 value = ctrl->val; in tvp514x_s_ctrl()
712 switch (ctrl->id) { in tvp514x_s_ctrl()
714 err = tvp514x_write_reg(sd, REG_BRIGHTNESS, value); in tvp514x_s_ctrl()
716 decoder->tvp514x_regs[REG_BRIGHTNESS].val = value; in tvp514x_s_ctrl()
719 err = tvp514x_write_reg(sd, REG_CONTRAST, value); in tvp514x_s_ctrl()
721 decoder->tvp514x_regs[REG_CONTRAST].val = value; in tvp514x_s_ctrl()
724 err = tvp514x_write_reg(sd, REG_SATURATION, value); in tvp514x_s_ctrl()
726 decoder->tvp514x_regs[REG_SATURATION].val = value; in tvp514x_s_ctrl()
731 else if (value == -180) in tvp514x_s_ctrl()
733 err = tvp514x_write_reg(sd, REG_HUE, value); in tvp514x_s_ctrl()
735 decoder->tvp514x_regs[REG_HUE].val = value; in tvp514x_s_ctrl()
738 err = tvp514x_write_reg(sd, REG_AFE_GAIN_CTRL, value ? 0x0f : 0x0c); in tvp514x_s_ctrl()
740 decoder->tvp514x_regs[REG_AFE_GAIN_CTRL].val = value; in tvp514x_s_ctrl()
744 v4l2_dbg(1, debug, sd, "Set Control: ID - %d - %d\n", in tvp514x_s_ctrl()
745 ctrl->id, ctrl->val); in tvp514x_s_ctrl()
750 * tvp514x_g_frame_interval() - V4L2 decoder interface handler
751 * @sd: pointer to standard V4L2 sub-device structure
757 tvp514x_g_frame_interval(struct v4l2_subdev *sd, in tvp514x_g_frame_interval() argument
760 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_g_frame_interval()
765 current_std = decoder->current_std; in tvp514x_g_frame_interval()
767 ival->interval = in tvp514x_g_frame_interval()
768 decoder->std_list[current_std].standard.frameperiod; in tvp514x_g_frame_interval()
774 * tvp514x_s_frame_interval() - V4L2 decoder interface handler
775 * @sd: pointer to standard V4L2 sub-device structure
782 tvp514x_s_frame_interval(struct v4l2_subdev *sd, in tvp514x_s_frame_interval() argument
785 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_s_frame_interval()
790 timeperframe = &ival->interval; in tvp514x_s_frame_interval()
793 current_std = decoder->current_std; in tvp514x_s_frame_interval()
796 decoder->std_list[current_std].standard.frameperiod; in tvp514x_s_frame_interval()
802 * tvp514x_s_stream() - V4L2 decoder i/f handler for s_stream
803 * @sd: pointer to standard V4L2 sub-device structure
808 static int tvp514x_s_stream(struct v4l2_subdev *sd, int enable) in tvp514x_s_stream() argument
811 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_s_stream()
813 if (decoder->streaming == enable) in tvp514x_s_stream()
820 err = tvp514x_write_reg(sd, REG_OPERATION_MODE, 0x01); in tvp514x_s_stream()
822 v4l2_err(sd, "Unable to turn off decoder\n"); in tvp514x_s_stream()
825 decoder->streaming = enable; in tvp514x_s_stream()
831 err = tvp514x_write_regs(sd, decoder->int_seq); in tvp514x_s_stream()
833 v4l2_err(sd, "Unable to turn on decoder\n"); in tvp514x_s_stream()
837 err = tvp514x_detect(sd, decoder); in tvp514x_s_stream()
839 v4l2_err(sd, "Unable to detect decoder\n"); in tvp514x_s_stream()
842 err = tvp514x_configure(sd, decoder); in tvp514x_s_stream()
844 v4l2_err(sd, "Unable to configure decoder\n"); in tvp514x_s_stream()
847 decoder->streaming = enable; in tvp514x_s_stream()
851 err = -ENODEV; in tvp514x_s_stream()
863 * tvp514x_enum_mbus_code() - V4L2 decoder interface handler for enum_mbus_code
864 * @sd: pointer to standard V4L2 sub-device structure
870 static int tvp514x_enum_mbus_code(struct v4l2_subdev *sd, in tvp514x_enum_mbus_code() argument
874 u32 pad = code->pad; in tvp514x_enum_mbus_code()
875 u32 index = code->index; in tvp514x_enum_mbus_code()
878 code->index = index; in tvp514x_enum_mbus_code()
879 code->pad = pad; in tvp514x_enum_mbus_code()
882 return -EINVAL; in tvp514x_enum_mbus_code()
884 code->code = MEDIA_BUS_FMT_UYVY8_2X8; in tvp514x_enum_mbus_code()
890 * tvp514x_get_pad_format() - V4L2 decoder interface handler for get pad format
891 * @sd: pointer to standard V4L2 sub-device structure
897 static int tvp514x_get_pad_format(struct v4l2_subdev *sd, in tvp514x_get_pad_format() argument
901 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_get_pad_format()
902 __u32 which = format->which; in tvp514x_get_pad_format()
904 if (format->pad) in tvp514x_get_pad_format()
905 return -EINVAL; in tvp514x_get_pad_format()
908 format->format = decoder->format; in tvp514x_get_pad_format()
912 format->format.code = MEDIA_BUS_FMT_UYVY8_2X8; in tvp514x_get_pad_format()
913 format->format.width = tvp514x_std_list[decoder->current_std].width; in tvp514x_get_pad_format()
914 format->format.height = tvp514x_std_list[decoder->current_std].height; in tvp514x_get_pad_format()
915 format->format.colorspace = V4L2_COLORSPACE_SMPTE170M; in tvp514x_get_pad_format()
916 format->format.field = V4L2_FIELD_INTERLACED; in tvp514x_get_pad_format()
922 * tvp514x_set_pad_format() - V4L2 decoder interface handler for set pad format
923 * @sd: pointer to standard V4L2 sub-device structure
929 static int tvp514x_set_pad_format(struct v4l2_subdev *sd, in tvp514x_set_pad_format() argument
933 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_set_pad_format()
935 if (fmt->format.field != V4L2_FIELD_INTERLACED || in tvp514x_set_pad_format()
936 fmt->format.code != MEDIA_BUS_FMT_UYVY8_2X8 || in tvp514x_set_pad_format()
937 fmt->format.colorspace != V4L2_COLORSPACE_SMPTE170M || in tvp514x_set_pad_format()
938 fmt->format.width != tvp514x_std_list[decoder->current_std].width || in tvp514x_set_pad_format()
939 fmt->format.height != tvp514x_std_list[decoder->current_std].height) in tvp514x_set_pad_format()
940 return -EINVAL; in tvp514x_set_pad_format()
942 decoder->format = fmt->format; in tvp514x_set_pad_format()
972 /* Default to NTSC 8-bit YUV 422 */
996 if (!IS_ENABLED(CONFIG_OF) || !client->dev.of_node) in tvp514x_get_pdata()
997 return client->dev.platform_data; in tvp514x_get_pdata()
999 endpoint = of_graph_get_next_endpoint(client->dev.of_node, NULL); in tvp514x_get_pdata()
1006 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL); in tvp514x_get_pdata()
1013 pdata->hs_polarity = 1; in tvp514x_get_pdata()
1016 pdata->vs_polarity = 1; in tvp514x_get_pdata()
1019 pdata->clk_polarity = 1; in tvp514x_get_pdata()
1027 * tvp514x_probe() - decoder driver i2c probe handler
1039 struct v4l2_subdev *sd; in tvp514x_probe() local
1043 dev_err(&client->dev, "No platform data\n"); in tvp514x_probe()
1044 return -EINVAL; in tvp514x_probe()
1048 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) in tvp514x_probe()
1049 return -EIO; in tvp514x_probe()
1051 decoder = devm_kzalloc(&client->dev, sizeof(*decoder), GFP_KERNEL); in tvp514x_probe()
1053 return -ENOMEM; in tvp514x_probe()
1058 memcpy(decoder->tvp514x_regs, tvp514x_reg_list_default, in tvp514x_probe()
1061 decoder->int_seq = (struct tvp514x_reg *)id->driver_data; in tvp514x_probe()
1064 decoder->pdata = pdata; in tvp514x_probe()
1071 decoder->tvp514x_regs[REG_OUTPUT_FORMATTER2].val |= in tvp514x_probe()
1072 (decoder->pdata->clk_polarity << 1); in tvp514x_probe()
1073 decoder->tvp514x_regs[REG_SYNC_CONTROL].val |= in tvp514x_probe()
1074 ((decoder->pdata->hs_polarity << 2) | in tvp514x_probe()
1075 (decoder->pdata->vs_polarity << 3)); in tvp514x_probe()
1077 decoder->tvp514x_regs[REG_VIDEO_STD].val = in tvp514x_probe()
1081 sd = &decoder->sd; in tvp514x_probe()
1082 v4l2_i2c_subdev_init(sd, client, &tvp514x_ops); in tvp514x_probe()
1085 decoder->pad.flags = MEDIA_PAD_FL_SOURCE; in tvp514x_probe()
1086 decoder->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in tvp514x_probe()
1087 decoder->sd.entity.function = MEDIA_ENT_F_ATV_DECODER; in tvp514x_probe()
1089 ret = media_entity_pads_init(&decoder->sd.entity, 1, &decoder->pad); in tvp514x_probe()
1091 v4l2_err(sd, "%s decoder driver failed to register !!\n", in tvp514x_probe()
1092 sd->name); in tvp514x_probe()
1096 v4l2_ctrl_handler_init(&decoder->hdl, 5); in tvp514x_probe()
1097 v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops, in tvp514x_probe()
1099 v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops, in tvp514x_probe()
1101 v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops, in tvp514x_probe()
1103 v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops, in tvp514x_probe()
1104 V4L2_CID_HUE, -180, 180, 180, 0); in tvp514x_probe()
1105 v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops, in tvp514x_probe()
1107 sd->ctrl_handler = &decoder->hdl; in tvp514x_probe()
1108 if (decoder->hdl.error) { in tvp514x_probe()
1109 ret = decoder->hdl.error; in tvp514x_probe()
1112 v4l2_ctrl_handler_setup(&decoder->hdl); in tvp514x_probe()
1114 ret = v4l2_async_register_subdev(&decoder->sd); in tvp514x_probe()
1116 v4l2_info(sd, "%s decoder driver registered !!\n", sd->name); in tvp514x_probe()
1120 v4l2_ctrl_handler_free(&decoder->hdl); in tvp514x_probe()
1121 media_entity_cleanup(&decoder->sd.entity); in tvp514x_probe()
1127 * tvp514x_remove() - decoder driver i2c remove handler
1135 struct v4l2_subdev *sd = i2c_get_clientdata(client); in tvp514x_remove() local
1136 struct tvp514x_decoder *decoder = to_decoder(sd); in tvp514x_remove()
1138 v4l2_async_unregister_subdev(&decoder->sd); in tvp514x_remove()
1139 media_entity_cleanup(&decoder->sd.entity); in tvp514x_remove()
1140 v4l2_ctrl_handler_free(&decoder->hdl); in tvp514x_remove()
1190 * I2C Device Table -
1192 * name - Name of the actual device/chip.
1193 * driver_data - Driver data