Lines Matching defs:solo_dev
171 static u8 tw_readbyte(struct solo_dev *solo_dev, int chip_id, u8 tw6x_off,
174 if (is_tw286x(solo_dev, chip_id))
175 return solo_i2c_readbyte(solo_dev, SOLO_I2C_TW,
179 return solo_i2c_readbyte(solo_dev, SOLO_I2C_TW,
184 static void tw_writebyte(struct solo_dev *solo_dev, int chip_id,
187 if (is_tw286x(solo_dev, chip_id))
188 solo_i2c_writebyte(solo_dev, SOLO_I2C_TW,
192 solo_i2c_writebyte(solo_dev, SOLO_I2C_TW,
197 static void tw_write_and_verify(struct solo_dev *solo_dev, u8 addr, u8 off,
203 u8 rval = solo_i2c_readbyte(solo_dev, SOLO_I2C_TW, addr, off);
208 solo_i2c_writebyte(solo_dev, SOLO_I2C_TW, addr, off, val);
216 static int tw2865_setup(struct solo_dev *solo_dev, u8 dev_addr)
221 if (solo_dev->video_type == SOLO_VO_FMT_TYPE_PAL)
229 if (solo_dev->nr_chans == 4) {
232 } else if (solo_dev->nr_chans == 8) {
236 } else if (solo_dev->nr_chans == 16) {
260 tw_write_and_verify(solo_dev, dev_addr, i,
267 static int tw2864_setup(struct solo_dev *solo_dev, u8 dev_addr)
272 if (solo_dev->video_type == SOLO_VO_FMT_TYPE_PAL)
279 if (solo_dev->tw2865 == 0) {
281 if (solo_dev->nr_chans == 4) {
284 } else if (solo_dev->nr_chans == 8) {
290 } else if (solo_dev->nr_chans == 16) {
307 if (solo_dev->nr_chans == 8) {
311 } else if (solo_dev->nr_chans == 16) {
336 tw_write_and_verify(solo_dev, dev_addr, i,
343 static int tw2815_setup(struct solo_dev *solo_dev, u8 dev_addr)
411 (solo_dev->video_type == SOLO_VO_FMT_TYPE_NTSC) ?
420 if (solo_dev->nr_chans == 4) {
423 } else if (solo_dev->nr_chans == 8) {
429 } else if (solo_dev->nr_chans == 16) {
482 solo_i2c_writebyte(solo_dev, SOLO_I2C_TW,
494 solo_i2c_writebyte(solo_dev, SOLO_I2C_TW, dev_addr, i,
504 static void saa712x_write_regs(struct solo_dev *dev, const u8 *vals,
523 static void saa712x_setup(struct solo_dev *dev)
582 int solo_tw28_init(struct solo_dev *solo_dev)
587 solo_dev->tw28_cnt = 0;
590 for (i = 0; i < solo_dev->nr_chans / 4; i++) {
591 value = solo_i2c_readbyte(solo_dev, SOLO_I2C_TW,
596 solo_dev->tw2865 |= 1 << i;
597 solo_dev->tw28_cnt++;
601 solo_dev->tw2864 |= 1 << i;
602 solo_dev->tw28_cnt++;
605 value = solo_i2c_readbyte(solo_dev, SOLO_I2C_TW,
609 solo_dev->tw2815 |= 1 << i;
610 solo_dev->tw28_cnt++;
615 if (solo_dev->tw28_cnt != (solo_dev->nr_chans >> 2)) {
616 dev_err(&solo_dev->pdev->dev,
621 saa712x_setup(solo_dev);
623 for (i = 0; i < solo_dev->tw28_cnt; i++) {
624 if ((solo_dev->tw2865 & (1 << i)))
625 tw2865_setup(solo_dev, TW_CHIP_OFFSET_ADDR(i));
626 else if ((solo_dev->tw2864 & (1 << i)))
627 tw2864_setup(solo_dev, TW_CHIP_OFFSET_ADDR(i));
629 tw2815_setup(solo_dev, TW_CHIP_OFFSET_ADDR(i));
641 int tw28_get_video_status(struct solo_dev *solo_dev, u8 ch)
649 val = tw_readbyte(solo_dev, chip_num, TW286x_AV_STAT_ADDR,
658 u16 tw28_get_audio_status(struct solo_dev *solo_dev)
664 for (i = 0; i < solo_dev->tw28_cnt; i++) {
665 val = (tw_readbyte(solo_dev, i, TW286x_AV_STAT_ADDR,
674 bool tw28_has_sharpness(struct solo_dev *solo_dev, u8 ch)
676 return is_tw286x(solo_dev, ch / 4);
679 int tw28_set_ctrl_val(struct solo_dev *solo_dev, u32 ctrl, u8 ch,
695 if (is_tw286x(solo_dev, chip_num)) {
696 u8 v = solo_i2c_readbyte(solo_dev, SOLO_I2C_TW,
701 solo_i2c_writebyte(solo_dev, SOLO_I2C_TW,
710 if (is_tw286x(solo_dev, chip_num))
714 tw_writebyte(solo_dev, chip_num, TW286x_HUE_ADDR(ch),
721 if (is_tw286x(solo_dev, chip_num)) {
722 solo_i2c_writebyte(solo_dev, SOLO_I2C_TW,
726 tw_writebyte(solo_dev, chip_num, TW286x_SATURATIONV_ADDR(ch),
732 tw_writebyte(solo_dev, chip_num, TW286x_CONTRAST_ADDR(ch),
737 if (is_tw286x(solo_dev, chip_num))
741 tw_writebyte(solo_dev, chip_num, TW286x_BRIGHTNESS_ADDR(ch),
752 int tw28_get_ctrl_val(struct solo_dev *solo_dev, u32 ctrl, u8 ch,
764 if (is_tw286x(solo_dev, chip_num)) {
765 rval = solo_i2c_readbyte(solo_dev, SOLO_I2C_TW,
773 rval = tw_readbyte(solo_dev, chip_num, TW286x_HUE_ADDR(ch),
775 if (is_tw286x(solo_dev, chip_num))
781 *val = tw_readbyte(solo_dev, chip_num,
786 *val = tw_readbyte(solo_dev, chip_num,
791 rval = tw_readbyte(solo_dev, chip_num,
794 if (is_tw286x(solo_dev, chip_num))
812 void tw2815_Set_AudioOutVol(struct solo_dev *solo_dev, unsigned int u_val)
817 chip_num = (solo_dev->nr_chans - 1) / 4;
819 val = tw_readbyte(solo_dev, chip_num, TW286x_AUDIO_OUTPUT_VOL_ADDR,
824 tw_writebyte(solo_dev, chip_num, TW286x_AUDIO_OUTPUT_VOL_ADDR,
829 u8 tw28_get_audio_gain(struct solo_dev *solo_dev, u8 ch)
838 val = tw_readbyte(solo_dev, chip_num,
845 void tw28_set_audio_gain(struct solo_dev *solo_dev, u8 ch, u8 val)
854 old_val = tw_readbyte(solo_dev, chip_num,
861 tw_writebyte(solo_dev, chip_num, TW286x_AUDIO_INPUT_GAIN_ADDR(ch),