Lines Matching refs:sd
36 struct v4l2_subdev sd; member
46 static inline struct tvp5150 *to_tvp5150(struct v4l2_subdev *sd) in to_tvp5150() argument
48 return container_of(sd, struct tvp5150, sd); in to_tvp5150()
53 return &container_of(ctrl->handler, struct tvp5150, hdl)->sd; in to_sd()
56 static int tvp5150_read(struct v4l2_subdev *sd, unsigned char addr) in tvp5150_read() argument
58 struct i2c_client *c = v4l2_get_subdevdata(sd); in tvp5150_read()
63 v4l2_err(sd, "i2c i/o error: rc == %d\n", rc); in tvp5150_read()
67 v4l2_dbg(2, debug, sd, "tvp5150: read 0x%02x = 0x%02x\n", addr, rc); in tvp5150_read()
72 static inline void tvp5150_write(struct v4l2_subdev *sd, unsigned char addr, in tvp5150_write() argument
75 struct i2c_client *c = v4l2_get_subdevdata(sd); in tvp5150_write()
78 v4l2_dbg(2, debug, sd, "tvp5150: writing 0x%02x 0x%02x\n", addr, value); in tvp5150_write()
81 v4l2_dbg(0, debug, sd, "i2c i/o error: rc == %d\n", rc); in tvp5150_write()
84 static void dump_reg_range(struct v4l2_subdev *sd, char *s, u8 init, in dump_reg_range() argument
95 printk("%02x ", tvp5150_read(sd, init)); in dump_reg_range()
103 static int tvp5150_log_status(struct v4l2_subdev *sd) in tvp5150_log_status() argument
106 tvp5150_read(sd, TVP5150_VD_IN_SRC_SEL_1)); in tvp5150_log_status()
108 tvp5150_read(sd, TVP5150_ANAL_CHL_CTL)); in tvp5150_log_status()
110 tvp5150_read(sd, TVP5150_OP_MODE_CTL)); in tvp5150_log_status()
112 tvp5150_read(sd, TVP5150_MISC_CTL)); in tvp5150_log_status()
114 tvp5150_read(sd, TVP5150_AUTOSW_MSK)); in tvp5150_log_status()
116 tvp5150_read(sd, TVP5150_COLOR_KIL_THSH_CTL)); in tvp5150_log_status()
118 tvp5150_read(sd, TVP5150_LUMA_PROC_CTL_1), in tvp5150_log_status()
119 tvp5150_read(sd, TVP5150_LUMA_PROC_CTL_2), in tvp5150_log_status()
120 tvp5150_read(sd, TVP5150_LUMA_PROC_CTL_3)); in tvp5150_log_status()
122 tvp5150_read(sd, TVP5150_BRIGHT_CTL)); in tvp5150_log_status()
124 tvp5150_read(sd, TVP5150_SATURATION_CTL)); in tvp5150_log_status()
126 tvp5150_read(sd, TVP5150_HUE_CTL)); in tvp5150_log_status()
128 tvp5150_read(sd, TVP5150_CONTRAST_CTL)); in tvp5150_log_status()
130 tvp5150_read(sd, TVP5150_DATA_RATE_SEL)); in tvp5150_log_status()
132 tvp5150_read(sd, TVP5150_CONF_SHARED_PIN)); in tvp5150_log_status()
134 tvp5150_read(sd, TVP5150_ACT_VD_CROP_ST_MSB), in tvp5150_log_status()
135 tvp5150_read(sd, TVP5150_ACT_VD_CROP_ST_LSB)); in tvp5150_log_status()
137 tvp5150_read(sd, TVP5150_ACT_VD_CROP_STP_MSB), in tvp5150_log_status()
138 tvp5150_read(sd, TVP5150_ACT_VD_CROP_STP_LSB)); in tvp5150_log_status()
140 tvp5150_read(sd, TVP5150_GENLOCK)); in tvp5150_log_status()
142 tvp5150_read(sd, TVP5150_HORIZ_SYNC_START)); in tvp5150_log_status()
144 tvp5150_read(sd, TVP5150_VERT_BLANKING_START)); in tvp5150_log_status()
146 tvp5150_read(sd, TVP5150_VERT_BLANKING_STOP)); in tvp5150_log_status()
148 tvp5150_read(sd, TVP5150_CHROMA_PROC_CTL_1), in tvp5150_log_status()
149 tvp5150_read(sd, TVP5150_CHROMA_PROC_CTL_2)); in tvp5150_log_status()
151 tvp5150_read(sd, TVP5150_INT_RESET_REG_B)); in tvp5150_log_status()
153 tvp5150_read(sd, TVP5150_INT_ENABLE_REG_B)); in tvp5150_log_status()
155 tvp5150_read(sd, TVP5150_INTT_CONFIG_REG_B)); in tvp5150_log_status()
157 tvp5150_read(sd, TVP5150_VIDEO_STD)); in tvp5150_log_status()
159 tvp5150_read(sd, TVP5150_CB_GAIN_FACT), in tvp5150_log_status()
160 tvp5150_read(sd, TVP5150_CR_GAIN_FACTOR)); in tvp5150_log_status()
162 tvp5150_read(sd, TVP5150_MACROVISION_ON_CTR)); in tvp5150_log_status()
164 tvp5150_read(sd, TVP5150_MACROVISION_OFF_CTR)); in tvp5150_log_status()
166 (tvp5150_read(sd, TVP5150_REV_SELECT) & 1) ? 3 : 4); in tvp5150_log_status()
168 tvp5150_read(sd, TVP5150_MSB_DEV_ID), in tvp5150_log_status()
169 tvp5150_read(sd, TVP5150_LSB_DEV_ID)); in tvp5150_log_status()
171 tvp5150_read(sd, TVP5150_ROM_MAJOR_VER), in tvp5150_log_status()
172 tvp5150_read(sd, TVP5150_ROM_MINOR_VER)); in tvp5150_log_status()
174 tvp5150_read(sd, TVP5150_VERT_LN_COUNT_MSB), in tvp5150_log_status()
175 tvp5150_read(sd, TVP5150_VERT_LN_COUNT_LSB)); in tvp5150_log_status()
177 tvp5150_read(sd, TVP5150_INT_STATUS_REG_B)); in tvp5150_log_status()
179 tvp5150_read(sd, TVP5150_INT_ACTIVE_REG_B)); in tvp5150_log_status()
181 tvp5150_read(sd, TVP5150_STATUS_REG_1), in tvp5150_log_status()
182 tvp5150_read(sd, TVP5150_STATUS_REG_2), in tvp5150_log_status()
183 tvp5150_read(sd, TVP5150_STATUS_REG_3), in tvp5150_log_status()
184 tvp5150_read(sd, TVP5150_STATUS_REG_4), in tvp5150_log_status()
185 tvp5150_read(sd, TVP5150_STATUS_REG_5)); in tvp5150_log_status()
187 dump_reg_range(sd, "Teletext filter 1", TVP5150_TELETEXT_FIL1_INI, in tvp5150_log_status()
189 dump_reg_range(sd, "Teletext filter 2", TVP5150_TELETEXT_FIL2_INI, in tvp5150_log_status()
193 tvp5150_read(sd, TVP5150_TELETEXT_FIL_ENA)); in tvp5150_log_status()
195 tvp5150_read(sd, TVP5150_INT_STATUS_REG_A)); in tvp5150_log_status()
197 tvp5150_read(sd, TVP5150_INT_ENABLE_REG_A)); in tvp5150_log_status()
199 tvp5150_read(sd, TVP5150_INT_CONF)); in tvp5150_log_status()
201 tvp5150_read(sd, TVP5150_VDP_STATUS_REG)); in tvp5150_log_status()
203 tvp5150_read(sd, TVP5150_FIFO_WORD_COUNT)); in tvp5150_log_status()
205 tvp5150_read(sd, TVP5150_FIFO_INT_THRESHOLD)); in tvp5150_log_status()
207 tvp5150_read(sd, TVP5150_FIFO_RESET)); in tvp5150_log_status()
209 tvp5150_read(sd, TVP5150_LINE_NUMBER_INT)); in tvp5150_log_status()
211 tvp5150_read(sd, TVP5150_PIX_ALIGN_REG_HIGH), in tvp5150_log_status()
212 tvp5150_read(sd, TVP5150_PIX_ALIGN_REG_LOW)); in tvp5150_log_status()
214 tvp5150_read(sd, TVP5150_FIFO_OUT_CTRL)); in tvp5150_log_status()
216 tvp5150_read(sd, TVP5150_FULL_FIELD_ENA)); in tvp5150_log_status()
218 tvp5150_read(sd, TVP5150_FULL_FIELD_MODE_REG)); in tvp5150_log_status()
220 dump_reg_range(sd, "CC data", TVP5150_CC_DATA_INI, in tvp5150_log_status()
223 dump_reg_range(sd, "WSS data", TVP5150_WSS_DATA_INI, in tvp5150_log_status()
226 dump_reg_range(sd, "VPS data", TVP5150_VPS_DATA_INI, in tvp5150_log_status()
229 dump_reg_range(sd, "VITC data", TVP5150_VITC_DATA_INI, in tvp5150_log_status()
232 dump_reg_range(sd, "Line mode", TVP5150_LINE_MODE_INI, in tvp5150_log_status()
241 static inline void tvp5150_selmux(struct v4l2_subdev *sd) in tvp5150_selmux() argument
244 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_selmux()
263 v4l2_dbg(1, debug, sd, "Selecting video route: route input=%i, output=%i " in tvp5150_selmux()
268 tvp5150_write(sd, TVP5150_OP_MODE_CTL, opmode); in tvp5150_selmux()
269 tvp5150_write(sd, TVP5150_VD_IN_SRC_SEL_1, input); in tvp5150_selmux()
274 val = tvp5150_read(sd, TVP5150_MISC_CTL); in tvp5150_selmux()
276 v4l2_err(sd, "%s: failed with error = %d\n", __func__, val); in tvp5150_selmux()
284 tvp5150_write(sd, TVP5150_MISC_CTL, val); in tvp5150_selmux()
552 static int tvp5150_write_inittab(struct v4l2_subdev *sd, in tvp5150_write_inittab() argument
556 tvp5150_write(sd, regs->reg, regs->value); in tvp5150_write_inittab()
562 static int tvp5150_vdp_init(struct v4l2_subdev *sd, in tvp5150_vdp_init() argument
568 tvp5150_write(sd, TVP5150_FULL_FIELD_ENA, 0); in tvp5150_vdp_init()
572 tvp5150_write(sd, i, 0xff); in tvp5150_vdp_init()
576 tvp5150_write(sd, TVP5150_CONF_RAM_ADDR_HIGH, regs->reg >> 8); in tvp5150_vdp_init()
577 tvp5150_write(sd, TVP5150_CONF_RAM_ADDR_LOW, regs->reg); in tvp5150_vdp_init()
580 tvp5150_write(sd, TVP5150_VDP_CONF_RAM_DATA, regs->values[i]); in tvp5150_vdp_init()
588 static int tvp5150_g_sliced_vbi_cap(struct v4l2_subdev *sd, in tvp5150_g_sliced_vbi_cap() argument
594 v4l2_dbg(1, debug, sd, "g_sliced_vbi_cap\n"); in tvp5150_g_sliced_vbi_cap()
621 static int tvp5150_set_vbi(struct v4l2_subdev *sd, in tvp5150_set_vbi() argument
626 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_set_vbi()
632 v4l2_err(sd, "VBI can't be configured without knowing number of lines\n"); in tvp5150_set_vbi()
660 tvp5150_write(sd, reg, type); in tvp5150_set_vbi()
664 tvp5150_write(sd, reg+1, type); in tvp5150_set_vbi()
670 static int tvp5150_get_vbi(struct v4l2_subdev *sd, in tvp5150_get_vbi() argument
673 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_get_vbi()
680 v4l2_err(sd, "VBI can't be configured without knowing number of lines\n"); in tvp5150_get_vbi()
693 ret = tvp5150_read(sd, reg + i); in tvp5150_get_vbi()
695 v4l2_err(sd, "%s: failed with error = %d\n", in tvp5150_get_vbi()
707 static int tvp5150_set_std(struct v4l2_subdev *sd, v4l2_std_id std) in tvp5150_set_std() argument
709 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_set_std()
732 v4l2_dbg(1, debug, sd, "Set video std register to %d.\n", fmt); in tvp5150_set_std()
733 tvp5150_write(sd, TVP5150_VIDEO_STD, fmt); in tvp5150_set_std()
737 static int tvp5150_s_std(struct v4l2_subdev *sd, v4l2_std_id std) in tvp5150_s_std() argument
739 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_s_std()
751 return tvp5150_set_std(sd, std); in tvp5150_s_std()
754 static int tvp5150_reset(struct v4l2_subdev *sd, u32 val) in tvp5150_reset() argument
756 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_reset()
759 tvp5150_write_inittab(sd, tvp5150_init_default); in tvp5150_reset()
762 tvp5150_vdp_init(sd, vbi_ram_default); in tvp5150_reset()
765 tvp5150_selmux(sd); in tvp5150_reset()
768 tvp5150_write_inittab(sd, tvp5150_init_enable); in tvp5150_reset()
773 tvp5150_set_std(sd, decoder->norm); in tvp5150_reset()
779 struct v4l2_subdev *sd = to_sd(ctrl); in tvp5150_s_ctrl() local
783 tvp5150_write(sd, TVP5150_BRIGHT_CTL, ctrl->val); in tvp5150_s_ctrl()
786 tvp5150_write(sd, TVP5150_CONTRAST_CTL, ctrl->val); in tvp5150_s_ctrl()
789 tvp5150_write(sd, TVP5150_SATURATION_CTL, ctrl->val); in tvp5150_s_ctrl()
792 tvp5150_write(sd, TVP5150_HUE_CTL, ctrl->val); in tvp5150_s_ctrl()
798 static v4l2_std_id tvp5150_read_std(struct v4l2_subdev *sd) in tvp5150_read_std() argument
800 int val = tvp5150_read(sd, TVP5150_STATUS_REG_5); in tvp5150_read_std()
820 static int tvp5150_enum_mbus_fmt(struct v4l2_subdev *sd, unsigned index, in tvp5150_enum_mbus_fmt() argument
830 static int tvp5150_mbus_fmt(struct v4l2_subdev *sd, in tvp5150_mbus_fmt() argument
833 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_mbus_fmt()
838 tvp5150_reset(sd, 0); in tvp5150_mbus_fmt()
847 v4l2_dbg(1, debug, sd, "width = %d, height = %d\n", f->width, in tvp5150_mbus_fmt()
852 static int tvp5150_s_crop(struct v4l2_subdev *sd, const struct v4l2_crop *a) in tvp5150_s_crop() argument
855 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_s_crop()
859 v4l2_dbg(1, debug, sd, "%s left=%d, top=%d, width=%d, height=%d\n", in tvp5150_s_crop()
874 std = tvp5150_read_std(sd); in tvp5150_s_crop()
887 tvp5150_write(sd, TVP5150_VERT_BLANKING_START, rect.top); in tvp5150_s_crop()
888 tvp5150_write(sd, TVP5150_VERT_BLANKING_STOP, in tvp5150_s_crop()
890 tvp5150_write(sd, TVP5150_ACT_VD_CROP_ST_MSB, in tvp5150_s_crop()
892 tvp5150_write(sd, TVP5150_ACT_VD_CROP_ST_LSB, in tvp5150_s_crop()
894 tvp5150_write(sd, TVP5150_ACT_VD_CROP_STP_MSB, in tvp5150_s_crop()
897 tvp5150_write(sd, TVP5150_ACT_VD_CROP_STP_LSB, in tvp5150_s_crop()
905 static int tvp5150_g_crop(struct v4l2_subdev *sd, struct v4l2_crop *a) in tvp5150_g_crop() argument
907 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_g_crop()
915 static int tvp5150_cropcap(struct v4l2_subdev *sd, struct v4l2_cropcap *a) in tvp5150_cropcap() argument
917 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_cropcap()
929 std = tvp5150_read_std(sd); in tvp5150_cropcap()
949 static int tvp5150_s_routing(struct v4l2_subdev *sd, in tvp5150_s_routing() argument
952 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_s_routing()
956 tvp5150_selmux(sd); in tvp5150_s_routing()
960 static int tvp5150_s_raw_fmt(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt) in tvp5150_s_raw_fmt() argument
968 tvp5150_write(sd, TVP5150_LUMA_PROC_CTL_1, 0x70); in tvp5150_s_raw_fmt()
970 tvp5150_write(sd, TVP5150_VERT_BLANKING_START, 0x00); in tvp5150_s_raw_fmt()
971 tvp5150_write(sd, TVP5150_VERT_BLANKING_STOP, 0x01); in tvp5150_s_raw_fmt()
976 static int tvp5150_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *svbi) in tvp5150_s_sliced_fmt() argument
984 tvp5150_set_vbi(sd, vbi_ram_default, in tvp5150_s_sliced_fmt()
988 tvp5150_write(sd, TVP5150_FIFO_OUT_CTRL, 1); in tvp5150_s_sliced_fmt()
991 tvp5150_write(sd, TVP5150_FIFO_OUT_CTRL, 0); in tvp5150_s_sliced_fmt()
994 tvp5150_write(sd, TVP5150_FULL_FIELD_ENA, 0); in tvp5150_s_sliced_fmt()
998 tvp5150_write(sd, i, 0xff); in tvp5150_s_sliced_fmt()
1003 static int tvp5150_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *svbi) in tvp5150_g_sliced_fmt() argument
1011 tvp5150_get_vbi(sd, vbi_ram_default, i); in tvp5150_g_sliced_fmt()
1019 static int tvp5150_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg) in tvp5150_g_register() argument
1023 res = tvp5150_read(sd, reg->reg & 0xff); in tvp5150_g_register()
1025 v4l2_err(sd, "%s: failed with error = %d\n", __func__, res); in tvp5150_g_register()
1034 static int tvp5150_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg) in tvp5150_s_register() argument
1036 tvp5150_write(sd, reg->reg & 0xff, reg->val & 0xff); in tvp5150_s_register()
1041 static int tvp5150_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt) in tvp5150_g_tuner() argument
1043 int status = tvp5150_read(sd, 0x88); in tvp5150_g_tuner()
1103 struct v4l2_subdev *sd; in tvp5150_probe() local
1115 sd = &core->sd; in tvp5150_probe()
1116 v4l2_i2c_subdev_init(sd, c, &tvp5150_ops); in tvp5150_probe()
1123 res = tvp5150_read(sd, TVP5150_MSB_DEV_ID + i); in tvp5150_probe()
1133 v4l2_info(sd, "tvp%02x%02xam1 detected.\n", in tvp5150_probe()
1137 tvp5150_write(sd, TVP5150_REV_SELECT, 0); in tvp5150_probe()
1141 v4l2_info(sd, "tvp%02x%02xa detected.\n", in tvp5150_probe()
1144 v4l2_info(sd, "*** unknown tvp%02x%02x chip detected.\n", in tvp5150_probe()
1146 v4l2_info(sd, "*** Rom ver is %d.%d\n", in tvp5150_probe()
1164 sd->ctrl_handler = &core->hdl; in tvp5150_probe()
1174 if (tvp5150_read_std(sd) & V4L2_STD_525_60) in tvp5150_probe()
1182 tvp5150_log_status(sd); in tvp5150_probe()
1188 struct v4l2_subdev *sd = i2c_get_clientdata(c); in tvp5150_remove() local
1189 struct tvp5150 *decoder = to_tvp5150(sd); in tvp5150_remove()
1191 v4l2_dbg(1, debug, sd, in tvp5150_remove()
1195 v4l2_device_unregister_subdev(sd); in tvp5150_remove()