Lines Matching refs:sd
37 struct v4l2_subdev sd; member
47 static inline struct tvp5150 *to_tvp5150(struct v4l2_subdev *sd) in to_tvp5150() argument
49 return container_of(sd, struct tvp5150, sd); in to_tvp5150()
54 return &container_of(ctrl->handler, struct tvp5150, hdl)->sd; in to_sd()
57 static int tvp5150_read(struct v4l2_subdev *sd, unsigned char addr) in tvp5150_read() argument
59 struct i2c_client *c = v4l2_get_subdevdata(sd); in tvp5150_read()
64 v4l2_err(sd, "i2c i/o error: rc == %d\n", rc); in tvp5150_read()
68 v4l2_dbg(2, debug, sd, "tvp5150: read 0x%02x = 0x%02x\n", addr, rc); in tvp5150_read()
73 static inline void tvp5150_write(struct v4l2_subdev *sd, unsigned char addr, in tvp5150_write() argument
76 struct i2c_client *c = v4l2_get_subdevdata(sd); in tvp5150_write()
79 v4l2_dbg(2, debug, sd, "tvp5150: writing 0x%02x 0x%02x\n", addr, value); in tvp5150_write()
82 v4l2_dbg(0, debug, sd, "i2c i/o error: rc == %d\n", rc); in tvp5150_write()
85 static void dump_reg_range(struct v4l2_subdev *sd, char *s, u8 init, in dump_reg_range() argument
96 printk("%02x ", tvp5150_read(sd, init)); in dump_reg_range()
104 static int tvp5150_log_status(struct v4l2_subdev *sd) in tvp5150_log_status() argument
107 tvp5150_read(sd, TVP5150_VD_IN_SRC_SEL_1)); in tvp5150_log_status()
109 tvp5150_read(sd, TVP5150_ANAL_CHL_CTL)); in tvp5150_log_status()
111 tvp5150_read(sd, TVP5150_OP_MODE_CTL)); in tvp5150_log_status()
113 tvp5150_read(sd, TVP5150_MISC_CTL)); in tvp5150_log_status()
115 tvp5150_read(sd, TVP5150_AUTOSW_MSK)); in tvp5150_log_status()
117 tvp5150_read(sd, TVP5150_COLOR_KIL_THSH_CTL)); in tvp5150_log_status()
119 tvp5150_read(sd, TVP5150_LUMA_PROC_CTL_1), in tvp5150_log_status()
120 tvp5150_read(sd, TVP5150_LUMA_PROC_CTL_2), in tvp5150_log_status()
121 tvp5150_read(sd, TVP5150_LUMA_PROC_CTL_3)); in tvp5150_log_status()
123 tvp5150_read(sd, TVP5150_BRIGHT_CTL)); in tvp5150_log_status()
125 tvp5150_read(sd, TVP5150_SATURATION_CTL)); in tvp5150_log_status()
127 tvp5150_read(sd, TVP5150_HUE_CTL)); in tvp5150_log_status()
129 tvp5150_read(sd, TVP5150_CONTRAST_CTL)); in tvp5150_log_status()
131 tvp5150_read(sd, TVP5150_DATA_RATE_SEL)); in tvp5150_log_status()
133 tvp5150_read(sd, TVP5150_CONF_SHARED_PIN)); in tvp5150_log_status()
135 tvp5150_read(sd, TVP5150_ACT_VD_CROP_ST_MSB), in tvp5150_log_status()
136 tvp5150_read(sd, TVP5150_ACT_VD_CROP_ST_LSB)); in tvp5150_log_status()
138 tvp5150_read(sd, TVP5150_ACT_VD_CROP_STP_MSB), in tvp5150_log_status()
139 tvp5150_read(sd, TVP5150_ACT_VD_CROP_STP_LSB)); in tvp5150_log_status()
141 tvp5150_read(sd, TVP5150_GENLOCK)); in tvp5150_log_status()
143 tvp5150_read(sd, TVP5150_HORIZ_SYNC_START)); in tvp5150_log_status()
145 tvp5150_read(sd, TVP5150_VERT_BLANKING_START)); in tvp5150_log_status()
147 tvp5150_read(sd, TVP5150_VERT_BLANKING_STOP)); in tvp5150_log_status()
149 tvp5150_read(sd, TVP5150_CHROMA_PROC_CTL_1), in tvp5150_log_status()
150 tvp5150_read(sd, TVP5150_CHROMA_PROC_CTL_2)); in tvp5150_log_status()
152 tvp5150_read(sd, TVP5150_INT_RESET_REG_B)); in tvp5150_log_status()
154 tvp5150_read(sd, TVP5150_INT_ENABLE_REG_B)); in tvp5150_log_status()
156 tvp5150_read(sd, TVP5150_INTT_CONFIG_REG_B)); in tvp5150_log_status()
158 tvp5150_read(sd, TVP5150_VIDEO_STD)); in tvp5150_log_status()
160 tvp5150_read(sd, TVP5150_CB_GAIN_FACT), in tvp5150_log_status()
161 tvp5150_read(sd, TVP5150_CR_GAIN_FACTOR)); in tvp5150_log_status()
163 tvp5150_read(sd, TVP5150_MACROVISION_ON_CTR)); in tvp5150_log_status()
165 tvp5150_read(sd, TVP5150_MACROVISION_OFF_CTR)); in tvp5150_log_status()
167 (tvp5150_read(sd, TVP5150_REV_SELECT) & 1) ? 3 : 4); in tvp5150_log_status()
169 tvp5150_read(sd, TVP5150_MSB_DEV_ID), in tvp5150_log_status()
170 tvp5150_read(sd, TVP5150_LSB_DEV_ID)); in tvp5150_log_status()
172 tvp5150_read(sd, TVP5150_ROM_MAJOR_VER), in tvp5150_log_status()
173 tvp5150_read(sd, TVP5150_ROM_MINOR_VER)); in tvp5150_log_status()
175 tvp5150_read(sd, TVP5150_VERT_LN_COUNT_MSB), in tvp5150_log_status()
176 tvp5150_read(sd, TVP5150_VERT_LN_COUNT_LSB)); in tvp5150_log_status()
178 tvp5150_read(sd, TVP5150_INT_STATUS_REG_B)); in tvp5150_log_status()
180 tvp5150_read(sd, TVP5150_INT_ACTIVE_REG_B)); in tvp5150_log_status()
182 tvp5150_read(sd, TVP5150_STATUS_REG_1), in tvp5150_log_status()
183 tvp5150_read(sd, TVP5150_STATUS_REG_2), in tvp5150_log_status()
184 tvp5150_read(sd, TVP5150_STATUS_REG_3), in tvp5150_log_status()
185 tvp5150_read(sd, TVP5150_STATUS_REG_4), in tvp5150_log_status()
186 tvp5150_read(sd, TVP5150_STATUS_REG_5)); in tvp5150_log_status()
188 dump_reg_range(sd, "Teletext filter 1", TVP5150_TELETEXT_FIL1_INI, in tvp5150_log_status()
190 dump_reg_range(sd, "Teletext filter 2", TVP5150_TELETEXT_FIL2_INI, in tvp5150_log_status()
194 tvp5150_read(sd, TVP5150_TELETEXT_FIL_ENA)); in tvp5150_log_status()
196 tvp5150_read(sd, TVP5150_INT_STATUS_REG_A)); in tvp5150_log_status()
198 tvp5150_read(sd, TVP5150_INT_ENABLE_REG_A)); in tvp5150_log_status()
200 tvp5150_read(sd, TVP5150_INT_CONF)); in tvp5150_log_status()
202 tvp5150_read(sd, TVP5150_VDP_STATUS_REG)); in tvp5150_log_status()
204 tvp5150_read(sd, TVP5150_FIFO_WORD_COUNT)); in tvp5150_log_status()
206 tvp5150_read(sd, TVP5150_FIFO_INT_THRESHOLD)); in tvp5150_log_status()
208 tvp5150_read(sd, TVP5150_FIFO_RESET)); in tvp5150_log_status()
210 tvp5150_read(sd, TVP5150_LINE_NUMBER_INT)); in tvp5150_log_status()
212 tvp5150_read(sd, TVP5150_PIX_ALIGN_REG_HIGH), in tvp5150_log_status()
213 tvp5150_read(sd, TVP5150_PIX_ALIGN_REG_LOW)); in tvp5150_log_status()
215 tvp5150_read(sd, TVP5150_FIFO_OUT_CTRL)); in tvp5150_log_status()
217 tvp5150_read(sd, TVP5150_FULL_FIELD_ENA)); in tvp5150_log_status()
219 tvp5150_read(sd, TVP5150_FULL_FIELD_MODE_REG)); in tvp5150_log_status()
221 dump_reg_range(sd, "CC data", TVP5150_CC_DATA_INI, in tvp5150_log_status()
224 dump_reg_range(sd, "WSS data", TVP5150_WSS_DATA_INI, in tvp5150_log_status()
227 dump_reg_range(sd, "VPS data", TVP5150_VPS_DATA_INI, in tvp5150_log_status()
230 dump_reg_range(sd, "VITC data", TVP5150_VITC_DATA_INI, in tvp5150_log_status()
233 dump_reg_range(sd, "Line mode", TVP5150_LINE_MODE_INI, in tvp5150_log_status()
242 static inline void tvp5150_selmux(struct v4l2_subdev *sd) in tvp5150_selmux() argument
245 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_selmux()
264 v4l2_dbg(1, debug, sd, "Selecting video route: route input=%i, output=%i " in tvp5150_selmux()
269 tvp5150_write(sd, TVP5150_OP_MODE_CTL, opmode); in tvp5150_selmux()
270 tvp5150_write(sd, TVP5150_VD_IN_SRC_SEL_1, input); in tvp5150_selmux()
275 val = tvp5150_read(sd, TVP5150_MISC_CTL); in tvp5150_selmux()
277 v4l2_err(sd, "%s: failed with error = %d\n", __func__, val); in tvp5150_selmux()
285 tvp5150_write(sd, TVP5150_MISC_CTL, val); in tvp5150_selmux()
553 static int tvp5150_write_inittab(struct v4l2_subdev *sd, in tvp5150_write_inittab() argument
557 tvp5150_write(sd, regs->reg, regs->value); in tvp5150_write_inittab()
563 static int tvp5150_vdp_init(struct v4l2_subdev *sd, in tvp5150_vdp_init() argument
569 tvp5150_write(sd, TVP5150_FULL_FIELD_ENA, 0); in tvp5150_vdp_init()
573 tvp5150_write(sd, i, 0xff); in tvp5150_vdp_init()
577 tvp5150_write(sd, TVP5150_CONF_RAM_ADDR_HIGH, regs->reg >> 8); in tvp5150_vdp_init()
578 tvp5150_write(sd, TVP5150_CONF_RAM_ADDR_LOW, regs->reg); in tvp5150_vdp_init()
581 tvp5150_write(sd, TVP5150_VDP_CONF_RAM_DATA, regs->values[i]); in tvp5150_vdp_init()
589 static int tvp5150_g_sliced_vbi_cap(struct v4l2_subdev *sd, in tvp5150_g_sliced_vbi_cap() argument
595 v4l2_dbg(1, debug, sd, "g_sliced_vbi_cap\n"); in tvp5150_g_sliced_vbi_cap()
622 static int tvp5150_set_vbi(struct v4l2_subdev *sd, in tvp5150_set_vbi() argument
627 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_set_vbi()
633 v4l2_err(sd, "VBI can't be configured without knowing number of lines\n"); in tvp5150_set_vbi()
661 tvp5150_write(sd, reg, type); in tvp5150_set_vbi()
665 tvp5150_write(sd, reg+1, type); in tvp5150_set_vbi()
671 static int tvp5150_get_vbi(struct v4l2_subdev *sd, in tvp5150_get_vbi() argument
674 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_get_vbi()
681 v4l2_err(sd, "VBI can't be configured without knowing number of lines\n"); in tvp5150_get_vbi()
694 ret = tvp5150_read(sd, reg + i); in tvp5150_get_vbi()
696 v4l2_err(sd, "%s: failed with error = %d\n", in tvp5150_get_vbi()
708 static int tvp5150_set_std(struct v4l2_subdev *sd, v4l2_std_id std) in tvp5150_set_std() argument
710 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_set_std()
733 v4l2_dbg(1, debug, sd, "Set video std register to %d.\n", fmt); in tvp5150_set_std()
734 tvp5150_write(sd, TVP5150_VIDEO_STD, fmt); in tvp5150_set_std()
738 static int tvp5150_s_std(struct v4l2_subdev *sd, v4l2_std_id std) in tvp5150_s_std() argument
740 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_s_std()
752 return tvp5150_set_std(sd, std); in tvp5150_s_std()
755 static int tvp5150_reset(struct v4l2_subdev *sd, u32 val) in tvp5150_reset() argument
757 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_reset()
760 tvp5150_write_inittab(sd, tvp5150_init_default); in tvp5150_reset()
763 tvp5150_vdp_init(sd, vbi_ram_default); in tvp5150_reset()
766 tvp5150_selmux(sd); in tvp5150_reset()
769 tvp5150_write_inittab(sd, tvp5150_init_enable); in tvp5150_reset()
774 tvp5150_set_std(sd, decoder->norm); in tvp5150_reset()
780 struct v4l2_subdev *sd = to_sd(ctrl); in tvp5150_s_ctrl() local
784 tvp5150_write(sd, TVP5150_BRIGHT_CTL, ctrl->val); in tvp5150_s_ctrl()
787 tvp5150_write(sd, TVP5150_CONTRAST_CTL, ctrl->val); in tvp5150_s_ctrl()
790 tvp5150_write(sd, TVP5150_SATURATION_CTL, ctrl->val); in tvp5150_s_ctrl()
793 tvp5150_write(sd, TVP5150_HUE_CTL, ctrl->val); in tvp5150_s_ctrl()
799 static v4l2_std_id tvp5150_read_std(struct v4l2_subdev *sd) in tvp5150_read_std() argument
801 int val = tvp5150_read(sd, TVP5150_STATUS_REG_5); in tvp5150_read_std()
821 static int tvp5150_enum_mbus_code(struct v4l2_subdev *sd, in tvp5150_enum_mbus_code() argument
832 static int tvp5150_fill_fmt(struct v4l2_subdev *sd, in tvp5150_fill_fmt() argument
837 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_fill_fmt()
844 tvp5150_reset(sd, 0); in tvp5150_fill_fmt()
853 v4l2_dbg(1, debug, sd, "width = %d, height = %d\n", f->width, in tvp5150_fill_fmt()
858 static int tvp5150_s_crop(struct v4l2_subdev *sd, const struct v4l2_crop *a) in tvp5150_s_crop() argument
861 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_s_crop()
865 v4l2_dbg(1, debug, sd, "%s left=%d, top=%d, width=%d, height=%d\n", in tvp5150_s_crop()
880 std = tvp5150_read_std(sd); in tvp5150_s_crop()
893 tvp5150_write(sd, TVP5150_VERT_BLANKING_START, rect.top); in tvp5150_s_crop()
894 tvp5150_write(sd, TVP5150_VERT_BLANKING_STOP, in tvp5150_s_crop()
896 tvp5150_write(sd, TVP5150_ACT_VD_CROP_ST_MSB, in tvp5150_s_crop()
898 tvp5150_write(sd, TVP5150_ACT_VD_CROP_ST_LSB, in tvp5150_s_crop()
900 tvp5150_write(sd, TVP5150_ACT_VD_CROP_STP_MSB, in tvp5150_s_crop()
903 tvp5150_write(sd, TVP5150_ACT_VD_CROP_STP_LSB, in tvp5150_s_crop()
911 static int tvp5150_g_crop(struct v4l2_subdev *sd, struct v4l2_crop *a) in tvp5150_g_crop() argument
913 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_g_crop()
921 static int tvp5150_cropcap(struct v4l2_subdev *sd, struct v4l2_cropcap *a) in tvp5150_cropcap() argument
923 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_cropcap()
935 std = tvp5150_read_std(sd); in tvp5150_cropcap()
955 static int tvp5150_s_routing(struct v4l2_subdev *sd, in tvp5150_s_routing() argument
958 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_s_routing()
962 tvp5150_selmux(sd); in tvp5150_s_routing()
966 static int tvp5150_s_raw_fmt(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt) in tvp5150_s_raw_fmt() argument
974 tvp5150_write(sd, TVP5150_LUMA_PROC_CTL_1, 0x70); in tvp5150_s_raw_fmt()
976 tvp5150_write(sd, TVP5150_VERT_BLANKING_START, 0x00); in tvp5150_s_raw_fmt()
977 tvp5150_write(sd, TVP5150_VERT_BLANKING_STOP, 0x01); in tvp5150_s_raw_fmt()
982 static int tvp5150_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *svbi) in tvp5150_s_sliced_fmt() argument
990 tvp5150_set_vbi(sd, vbi_ram_default, in tvp5150_s_sliced_fmt()
994 tvp5150_write(sd, TVP5150_FIFO_OUT_CTRL, 1); in tvp5150_s_sliced_fmt()
997 tvp5150_write(sd, TVP5150_FIFO_OUT_CTRL, 0); in tvp5150_s_sliced_fmt()
1000 tvp5150_write(sd, TVP5150_FULL_FIELD_ENA, 0); in tvp5150_s_sliced_fmt()
1004 tvp5150_write(sd, i, 0xff); in tvp5150_s_sliced_fmt()
1009 static int tvp5150_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *svbi) in tvp5150_g_sliced_fmt() argument
1017 tvp5150_get_vbi(sd, vbi_ram_default, i); in tvp5150_g_sliced_fmt()
1025 static int tvp5150_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg) in tvp5150_g_register() argument
1029 res = tvp5150_read(sd, reg->reg & 0xff); in tvp5150_g_register()
1031 v4l2_err(sd, "%s: failed with error = %d\n", __func__, res); in tvp5150_g_register()
1040 static int tvp5150_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg) in tvp5150_s_register() argument
1042 tvp5150_write(sd, reg->reg & 0xff, reg->val & 0xff); in tvp5150_s_register()
1047 static int tvp5150_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt) in tvp5150_g_tuner() argument
1049 int status = tvp5150_read(sd, 0x88); in tvp5150_g_tuner()
1112 struct v4l2_subdev *sd; in tvp5150_probe() local
1124 sd = &core->sd; in tvp5150_probe()
1125 v4l2_i2c_subdev_init(sd, c, &tvp5150_ops); in tvp5150_probe()
1132 res = tvp5150_read(sd, TVP5150_MSB_DEV_ID + i); in tvp5150_probe()
1142 v4l2_info(sd, "tvp%02x%02xam1 detected.\n", in tvp5150_probe()
1146 tvp5150_write(sd, TVP5150_REV_SELECT, 0); in tvp5150_probe()
1150 v4l2_info(sd, "tvp%02x%02xa detected.\n", in tvp5150_probe()
1153 v4l2_info(sd, "*** unknown tvp%02x%02x chip detected.\n", in tvp5150_probe()
1155 v4l2_info(sd, "*** Rom ver is %d.%d\n", in tvp5150_probe()
1173 sd->ctrl_handler = &core->hdl; in tvp5150_probe()
1182 if (tvp5150_read_std(sd) & V4L2_STD_525_60) in tvp5150_probe()
1189 res = v4l2_async_register_subdev(sd); in tvp5150_probe()
1194 tvp5150_log_status(sd); in tvp5150_probe()
1204 struct v4l2_subdev *sd = i2c_get_clientdata(c); in tvp5150_remove() local
1205 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_remove()
1207 v4l2_dbg(1, debug, sd, in tvp5150_remove()
1211 v4l2_async_unregister_subdev(sd); in tvp5150_remove()