1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2018 Gateworks Corporation
5 #include <linux/delay.h>
6 #include <linux/hdmi.h>
8 #include <linux/init.h>
9 #include <linux/interrupt.h>
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/of_graph.h>
13 #include <linux/platform_device.h>
14 #include <linux/regulator/consumer.h>
15 #include <linux/types.h>
16 #include <linux/v4l2-dv-timings.h>
17 #include <linux/videodev2.h>
19 #include <media/v4l2-ctrls.h>
20 #include <media/v4l2-device.h>
21 #include <media/v4l2-dv-timings.h>
22 #include <media/v4l2-event.h>
23 #include <media/v4l2-fwnode.h>
24 #include <media/i2c/tda1997x.h>
26 #include <sound/core.h>
27 #include <sound/pcm.h>
28 #include <sound/pcm_params.h>
29 #include <sound/soc.h>
31 #include <dt-bindings/media/tda1997x.h>
33 #include "tda1997x_regs.h"
35 #define TDA1997X_MBUS_CODES 5
39 module_param(debug
, int, 0644);
40 MODULE_PARM_DESC(debug
, "debug level (0-2)");
43 static const char * const audtype_names
[] = {
44 "PCM", /* PCM Samples */
45 "HBR", /* High Bit Rate Audio */
46 "OBA", /* One-Bit Audio */
47 "DST" /* Direct Stream Transfer */
50 /* Audio output port formats */
52 AUDFMT_TYPE_DISABLED
= 0,
56 static const char * const audfmt_names
[] = {
62 /* Video input formats */
63 static const char * const hdmi_colorspace_names
[] = {
64 "RGB", "YUV422", "YUV444", "YUV420", "", "", "", "",
66 static const char * const hdmi_colorimetry_names
[] = {
67 "", "ITU601", "ITU709", "Extended",
69 static const char * const v4l2_quantization_names
[] = {
72 "Limited Range (16-235)",
75 /* Video output port formats */
76 static const char * const vidfmt_names
[] = {
77 "RGB444/YUV444", /* RGB/YUV444 16bit data bus, 8bpp */
78 "YUV422 semi-planar", /* YUV422 16bit data base, 8bpp */
79 "YUV422 CCIR656", /* BT656 (YUV 8bpp 2 clock per pixel) */
84 * Colorspace conversion matrices
86 struct color_matrix_coefs
{
118 /* NB: 4096 is 1.0 using fixed point numbers */
119 static const struct color_matrix_coefs conv_matrix
[] = {
121 "YUV709 -> RGB full",
129 "YUV601 -> RGB full",
137 "RGB limited -> RGB full",
145 "RGB limited -> ITU601",
153 "RGB limited -> ITU709",
161 "RGB full -> ITU601",
169 "RGB full -> ITU709",
178 static const struct v4l2_dv_timings_cap tda1997x_dv_timings_cap
= {
179 .type
= V4L2_DV_BT_656_1120
,
180 /* keep this initialization for compatibility with GCC < 4.4.6 */
183 V4L2_INIT_BT_TIMINGS(
184 640, 1920, /* min/max width */
185 350, 1200, /* min/max height */
186 13000000, 165000000, /* min/max pixelclock */
188 V4L2_DV_BT_STD_CEA861
| V4L2_DV_BT_STD_DMT
|
189 V4L2_DV_BT_STD_GTF
| V4L2_DV_BT_STD_CVT
,
191 V4L2_DV_BT_CAP_INTERLACED
| V4L2_DV_BT_CAP_PROGRESSIVE
|
192 V4L2_DV_BT_CAP_REDUCED_BLANKING
|
193 V4L2_DV_BT_CAP_CUSTOM
197 /* regulator supplies */
198 static const char * const tda1997x_supply_name
[] = {
199 "DOVDD", /* Digital I/O supply */
200 "DVDD", /* Digital Core supply */
201 "AVDD", /* Analog supply */
204 #define TDA1997X_NUM_SUPPLIES ARRAY_SIZE(tda1997x_supply_name)
211 enum tda1997x_hdmi_pads
{
216 struct tda1997x_chip_info
{
217 enum tda1997x_type type
;
221 struct tda1997x_state
{
222 const struct tda1997x_chip_info
*info
;
223 struct tda1997x_platform_data pdata
;
224 struct i2c_client
*client
;
225 struct i2c_client
*client_cec
;
226 struct v4l2_subdev sd
;
227 struct regulator_bulk_data supplies
[TDA1997X_NUM_SUPPLIES
];
228 struct media_pad pads
[TDA1997X_NUM_PADS
];
230 struct mutex page_lock
;
233 /* detected info from chip */
242 char mptrw_in_progress
;
243 char activity_status
;
244 char input_detect
[2];
247 struct hdmi_avi_infoframe avi_infoframe
;
248 struct v4l2_hdmi_colorimetry colorimetry
;
249 u32 rgb_quantization_range
;
250 struct v4l2_dv_timings timings
;
252 const struct color_matrix_coefs
*conv
;
253 u32 mbus_codes
[TDA1997X_MBUS_CODES
]; /* available modes */
254 u32 mbus_code
; /* current mode */
258 struct v4l2_ctrl_handler hdl
;
259 struct v4l2_ctrl
*detect_tx_5v_ctrl
;
260 struct v4l2_ctrl
*rgb_quantization_range_ctrl
;
264 int audio_samplerate
;
266 int audio_samplesize
;
268 struct mutex audio_lock
;
269 struct snd_pcm_substream
*audio_stream
;
277 struct delayed_work delayed_work_enable_hpd
;
280 static const struct v4l2_event tda1997x_ev_fmt
= {
281 .type
= V4L2_EVENT_SOURCE_CHANGE
,
282 .u
.src_change
.changes
= V4L2_EVENT_SRC_CH_RESOLUTION
,
285 static const struct tda1997x_chip_info tda1997x_chip_info
[] = {
296 static inline struct tda1997x_state
*to_state(struct v4l2_subdev
*sd
)
298 return container_of(sd
, struct tda1997x_state
, sd
);
301 static inline struct v4l2_subdev
*to_sd(struct v4l2_ctrl
*ctrl
)
303 return &container_of(ctrl
->handler
, struct tda1997x_state
, hdl
)->sd
;
306 static int tda1997x_cec_read(struct v4l2_subdev
*sd
, u8 reg
)
308 struct tda1997x_state
*state
= to_state(sd
);
311 val
= i2c_smbus_read_byte_data(state
->client_cec
, reg
);
313 v4l_err(state
->client
, "read reg error: reg=%2x\n", reg
);
320 static int tda1997x_cec_write(struct v4l2_subdev
*sd
, u8 reg
, u8 val
)
322 struct tda1997x_state
*state
= to_state(sd
);
325 ret
= i2c_smbus_write_byte_data(state
->client_cec
, reg
, val
);
327 v4l_err(state
->client
, "write reg error:reg=%2x,val=%2x\n",
335 /* -----------------------------------------------------------------------------
339 static int tda1997x_setpage(struct v4l2_subdev
*sd
, u8 page
)
341 struct tda1997x_state
*state
= to_state(sd
);
344 if (state
->page
!= page
) {
345 ret
= i2c_smbus_write_byte_data(state
->client
,
346 REG_CURPAGE_00H
, page
);
348 v4l_err(state
->client
,
349 "write reg error:reg=%2x,val=%2x\n",
350 REG_CURPAGE_00H
, page
);
358 static inline int io_read(struct v4l2_subdev
*sd
, u16 reg
)
360 struct tda1997x_state
*state
= to_state(sd
);
363 mutex_lock(&state
->page_lock
);
364 if (tda1997x_setpage(sd
, reg
>> 8)) {
369 val
= i2c_smbus_read_byte_data(state
->client
, reg
&0xff);
371 v4l_err(state
->client
, "read reg error: reg=%2x\n", reg
& 0xff);
377 mutex_unlock(&state
->page_lock
);
381 static inline long io_read16(struct v4l2_subdev
*sd
, u16 reg
)
386 val
= io_read(sd
, reg
);
390 val
= io_read(sd
, reg
+ 1);
398 static inline long io_read24(struct v4l2_subdev
*sd
, u16 reg
)
403 val
= io_read(sd
, reg
);
407 val
= io_read(sd
, reg
+ 1);
411 val
= io_read(sd
, reg
+ 2);
419 static unsigned int io_readn(struct v4l2_subdev
*sd
, u16 reg
, u8 len
, u8
*data
)
425 for (i
= 0; i
< len
; i
++) {
426 val
= io_read(sd
, reg
+ i
);
436 static int io_write(struct v4l2_subdev
*sd
, u16 reg
, u8 val
)
438 struct tda1997x_state
*state
= to_state(sd
);
441 mutex_lock(&state
->page_lock
);
442 if (tda1997x_setpage(sd
, reg
>> 8)) {
447 ret
= i2c_smbus_write_byte_data(state
->client
, reg
& 0xff, val
);
449 v4l_err(state
->client
, "write reg error:reg=%2x,val=%2x\n",
456 mutex_unlock(&state
->page_lock
);
460 static int io_write16(struct v4l2_subdev
*sd
, u16 reg
, u16 val
)
464 ret
= io_write(sd
, reg
, (val
>> 8) & 0xff);
467 ret
= io_write(sd
, reg
+ 1, val
& 0xff);
473 static int io_write24(struct v4l2_subdev
*sd
, u16 reg
, u32 val
)
477 ret
= io_write(sd
, reg
, (val
>> 16) & 0xff);
480 ret
= io_write(sd
, reg
+ 1, (val
>> 8) & 0xff);
483 ret
= io_write(sd
, reg
+ 2, val
& 0xff);
489 /* -----------------------------------------------------------------------------
494 HPD_LOW_BP
, /* HPD low and pulse of at least 100ms */
495 HPD_LOW_OTHER
, /* HPD low and pulse of at least 100ms */
496 HPD_HIGH_BP
, /* HIGH */
498 HPD_PULSE
, /* HPD low pulse */
501 /* manual HPD (Hot Plug Detect) control */
502 static int tda1997x_manual_hpd(struct v4l2_subdev
*sd
, enum hpd_mode mode
)
504 u8 hpd_auto
, hpd_pwr
, hpd_man
;
506 hpd_auto
= io_read(sd
, REG_HPD_AUTO_CTRL
);
507 hpd_pwr
= io_read(sd
, REG_HPD_POWER
);
508 hpd_man
= io_read(sd
, REG_HPD_MAN_CTRL
);
510 /* mask out unused bits */
511 hpd_man
&= (HPD_MAN_CTRL_HPD_PULSE
|
517 /* HPD low and pulse of at least 100ms */
520 hpd_pwr
&= ~HPD_POWER_BP_MASK
;
521 /* disable HPD_A and HPD_B */
522 hpd_man
&= ~(HPD_MAN_CTRL_HPD_A
| HPD_MAN_CTRL_HPD_B
);
523 io_write(sd
, REG_HPD_POWER
, hpd_pwr
);
524 io_write(sd
, REG_HPD_MAN_CTRL
, hpd_man
);
529 hpd_pwr
&= ~HPD_POWER_BP_MASK
;
530 hpd_pwr
|= 1 << HPD_POWER_BP_SHIFT
;
531 io_write(sd
, REG_HPD_POWER
, hpd_pwr
);
533 /* HPD low and pulse of at least 100ms */
535 /* disable HPD_A and HPD_B */
536 hpd_man
&= ~(HPD_MAN_CTRL_HPD_A
| HPD_MAN_CTRL_HPD_B
);
538 hpd_auto
&= ~HPD_AUTO_HP_OTHER
;
539 io_write(sd
, REG_HPD_AUTO_CTRL
, hpd_auto
);
540 io_write(sd
, REG_HPD_MAN_CTRL
, hpd_man
);
544 hpd_auto
|= HPD_AUTO_HP_OTHER
;
545 io_write(sd
, REG_HPD_AUTO_CTRL
, hpd_auto
);
549 /* disable HPD_A and HPD_B */
550 hpd_man
&= ~(HPD_MAN_CTRL_HPD_A
| HPD_MAN_CTRL_HPD_B
);
551 io_write(sd
, REG_HPD_MAN_CTRL
, hpd_man
);
558 static void tda1997x_delayed_work_enable_hpd(struct work_struct
*work
)
560 struct delayed_work
*dwork
= to_delayed_work(work
);
561 struct tda1997x_state
*state
= container_of(dwork
,
562 struct tda1997x_state
,
563 delayed_work_enable_hpd
);
564 struct v4l2_subdev
*sd
= &state
->sd
;
566 v4l2_dbg(2, debug
, sd
, "%s:\n", __func__
);
569 tda1997x_manual_hpd(sd
, HPD_HIGH_OTHER
);
570 tda1997x_manual_hpd(sd
, HPD_HIGH_BP
);
572 state
->edid
.present
= 1;
575 static void tda1997x_disable_edid(struct v4l2_subdev
*sd
)
577 struct tda1997x_state
*state
= to_state(sd
);
579 v4l2_dbg(1, debug
, sd
, "%s\n", __func__
);
580 cancel_delayed_work_sync(&state
->delayed_work_enable_hpd
);
583 tda1997x_manual_hpd(sd
, HPD_LOW_BP
);
586 static void tda1997x_enable_edid(struct v4l2_subdev
*sd
)
588 struct tda1997x_state
*state
= to_state(sd
);
590 v4l2_dbg(1, debug
, sd
, "%s\n", __func__
);
592 /* Enable hotplug after 100ms */
593 schedule_delayed_work(&state
->delayed_work_enable_hpd
, HZ
/ 10);
596 /* -----------------------------------------------------------------------------
601 * configure vid_fmt based on mbus_code
604 tda1997x_setup_format(struct tda1997x_state
*state
, u32 code
)
606 v4l_dbg(1, debug
, state
->client
, "%s code=0x%x\n", __func__
, code
);
608 case MEDIA_BUS_FMT_RGB121212_1X36
:
609 case MEDIA_BUS_FMT_RGB888_1X24
:
610 case MEDIA_BUS_FMT_YUV12_1X36
:
611 case MEDIA_BUS_FMT_YUV8_1X24
:
612 state
->vid_fmt
= OF_FMT_444
;
614 case MEDIA_BUS_FMT_UYVY12_1X24
:
615 case MEDIA_BUS_FMT_UYVY10_1X20
:
616 case MEDIA_BUS_FMT_UYVY8_1X16
:
617 state
->vid_fmt
= OF_FMT_422_SMPT
;
619 case MEDIA_BUS_FMT_UYVY12_2X12
:
620 case MEDIA_BUS_FMT_UYVY10_2X10
:
621 case MEDIA_BUS_FMT_UYVY8_2X8
:
622 state
->vid_fmt
= OF_FMT_422_CCIR
;
625 v4l_err(state
->client
, "incompatible format (0x%x)\n", code
);
628 v4l_dbg(1, debug
, state
->client
, "%s code=0x%x fmt=%s\n", __func__
,
629 code
, vidfmt_names
[state
->vid_fmt
]);
630 state
->mbus_code
= code
;
636 * The color conversion matrix will convert between the colorimetry of the
637 * HDMI input to the desired output format RGB|YUV. RGB output is to be
638 * full-range and YUV is to be limited range.
640 * RGB full-range uses values from 0 to 255 which is recommended on a monitor
641 * and RGB Limited uses values from 16 to 236 (16=black, 235=white) which is
642 * typically recommended on a TV.
645 tda1997x_configure_csc(struct v4l2_subdev
*sd
)
647 struct tda1997x_state
*state
= to_state(sd
);
648 struct hdmi_avi_infoframe
*avi
= &state
->avi_infoframe
;
649 struct v4l2_hdmi_colorimetry
*c
= &state
->colorimetry
;
650 /* Blanking code values depend on output colorspace (RGB or YUV) */
651 struct blanking_codes
{
656 static const struct blanking_codes rgb_blanking
= { 64, 64, 64 };
657 static const struct blanking_codes yuv_blanking
= { 64, 512, 512 };
658 const struct blanking_codes
*blanking_codes
= NULL
;
661 v4l_dbg(1, debug
, state
->client
, "input:%s quant:%s output:%s\n",
662 hdmi_colorspace_names
[avi
->colorspace
],
663 v4l2_quantization_names
[c
->quantization
],
664 vidfmt_names
[state
->vid_fmt
]);
666 switch (state
->vid_fmt
) {
669 blanking_codes
= &rgb_blanking
;
670 if (c
->colorspace
== V4L2_COLORSPACE_SRGB
) {
671 if (c
->quantization
== V4L2_QUANTIZATION_LIM_RANGE
)
672 state
->conv
= &conv_matrix
[RGBLIMITED_RGBFULL
];
674 if (c
->colorspace
== V4L2_COLORSPACE_REC709
)
675 state
->conv
= &conv_matrix
[ITU709_RGBFULL
];
676 else if (c
->colorspace
== V4L2_COLORSPACE_SMPTE170M
)
677 state
->conv
= &conv_matrix
[ITU601_RGBFULL
];
682 case OF_FMT_422_SMPT
: /* semi-planar */
683 case OF_FMT_422_CCIR
: /* CCIR656 */
684 blanking_codes
= &yuv_blanking
;
685 if ((c
->colorspace
== V4L2_COLORSPACE_SRGB
) &&
686 (c
->quantization
== V4L2_QUANTIZATION_FULL_RANGE
)) {
687 if (state
->timings
.bt
.height
<= 576)
688 state
->conv
= &conv_matrix
[RGBFULL_ITU601
];
690 state
->conv
= &conv_matrix
[RGBFULL_ITU709
];
691 } else if ((c
->colorspace
== V4L2_COLORSPACE_SRGB
) &&
692 (c
->quantization
== V4L2_QUANTIZATION_LIM_RANGE
)) {
693 if (state
->timings
.bt
.height
<= 576)
694 state
->conv
= &conv_matrix
[RGBLIMITED_ITU601
];
696 state
->conv
= &conv_matrix
[RGBLIMITED_ITU709
];
702 v4l_dbg(1, debug
, state
->client
, "%s\n",
704 /* enable matrix conversion */
705 reg
= io_read(sd
, REG_VDP_CTRL
);
706 reg
&= ~VDP_CTRL_MATRIX_BP
;
707 io_write(sd
, REG_VDP_CTRL
, reg
);
709 io_write16(sd
, REG_VDP_MATRIX
+ 0, state
->conv
->offint1
);
710 io_write16(sd
, REG_VDP_MATRIX
+ 2, state
->conv
->offint2
);
711 io_write16(sd
, REG_VDP_MATRIX
+ 4, state
->conv
->offint3
);
713 io_write16(sd
, REG_VDP_MATRIX
+ 6, state
->conv
->p11coef
);
714 io_write16(sd
, REG_VDP_MATRIX
+ 8, state
->conv
->p12coef
);
715 io_write16(sd
, REG_VDP_MATRIX
+ 10, state
->conv
->p13coef
);
716 io_write16(sd
, REG_VDP_MATRIX
+ 12, state
->conv
->p21coef
);
717 io_write16(sd
, REG_VDP_MATRIX
+ 14, state
->conv
->p22coef
);
718 io_write16(sd
, REG_VDP_MATRIX
+ 16, state
->conv
->p23coef
);
719 io_write16(sd
, REG_VDP_MATRIX
+ 18, state
->conv
->p31coef
);
720 io_write16(sd
, REG_VDP_MATRIX
+ 20, state
->conv
->p32coef
);
721 io_write16(sd
, REG_VDP_MATRIX
+ 22, state
->conv
->p33coef
);
723 io_write16(sd
, REG_VDP_MATRIX
+ 24, state
->conv
->offout1
);
724 io_write16(sd
, REG_VDP_MATRIX
+ 26, state
->conv
->offout2
);
725 io_write16(sd
, REG_VDP_MATRIX
+ 28, state
->conv
->offout3
);
727 /* disable matrix conversion */
728 reg
= io_read(sd
, REG_VDP_CTRL
);
729 reg
|= VDP_CTRL_MATRIX_BP
;
730 io_write(sd
, REG_VDP_CTRL
, reg
);
733 /* SetBlankingCodes */
734 if (blanking_codes
) {
735 io_write16(sd
, REG_BLK_GY
, blanking_codes
->code_gy
);
736 io_write16(sd
, REG_BLK_BU
, blanking_codes
->code_bu
);
737 io_write16(sd
, REG_BLK_RV
, blanking_codes
->code_rv
);
741 /* Configure frame detection window and VHREF timing generator */
743 tda1997x_configure_vhref(struct v4l2_subdev
*sd
)
745 struct tda1997x_state
*state
= to_state(sd
);
746 const struct v4l2_bt_timings
*bt
= &state
->timings
.bt
;
748 u16 href_start
, href_end
;
749 u16 vref_f1_start
, vref_f2_start
;
750 u8 vref_f1_width
, vref_f2_width
;
752 u16 fieldref_f1_start
, fieldref_f2_start
;
755 href_start
= bt
->hbackporch
+ bt
->hsync
+ 1;
756 href_end
= href_start
+ bt
->width
;
757 vref_f1_start
= bt
->height
+ bt
->vbackporch
+ bt
->vsync
+
758 bt
->il_vbackporch
+ bt
->il_vsync
+
760 vref_f1_width
= bt
->vbackporch
+ bt
->vsync
+ bt
->vfrontporch
;
763 fieldref_f1_start
= 0;
764 fieldref_f2_start
= 0;
765 if (bt
->interlaced
) {
766 vref_f2_start
= (bt
->height
/ 2) +
767 (bt
->il_vbackporch
+ bt
->il_vsync
- 1);
768 vref_f2_width
= bt
->il_vbackporch
+ bt
->il_vsync
+
770 fieldref_f2_start
= vref_f2_start
+ bt
->il_vfrontporch
+
775 width
= V4L2_DV_BT_FRAME_WIDTH(bt
);
776 lines
= V4L2_DV_BT_FRAME_HEIGHT(bt
);
779 * Configure Frame Detection Window:
780 * horiz area where the VHREF module consider a VSYNC a new frame
782 io_write16(sd
, REG_FDW_S
, 0x2ef); /* start position */
783 io_write16(sd
, REG_FDW_E
, 0x141); /* end position */
785 /* Set Pixel And Line Counters */
786 if (state
->chip_revision
== 0)
787 io_write16(sd
, REG_PXCNT_PR
, 4);
789 io_write16(sd
, REG_PXCNT_PR
, 1);
790 io_write16(sd
, REG_PXCNT_NPIX
, width
& MASK_VHREF
);
791 io_write16(sd
, REG_LCNT_PR
, 1);
792 io_write16(sd
, REG_LCNT_NLIN
, lines
& MASK_VHREF
);
795 * Configure the VHRef timing generator responsible for rebuilding all
796 * horiz and vert synch and ref signals from its input allowing auto
797 * detection algorithms and forcing predefined modes (480i & 576i)
799 reg
= VHREF_STD_DET_OFF
<< VHREF_STD_DET_SHIFT
;
800 io_write(sd
, REG_VHREF_CTRL
, reg
);
803 * Configure the VHRef timing values. In case the VHREF generator has
804 * been configured in manual mode, this will allow to manually set all
805 * horiz and vert ref values (non-active pixel areas) of the generator
806 * and allows setting the frame reference params.
808 /* horizontal reference start/end */
809 io_write16(sd
, REG_HREF_S
, href_start
& MASK_VHREF
);
810 io_write16(sd
, REG_HREF_E
, href_end
& MASK_VHREF
);
811 /* vertical reference f1 start/end */
812 io_write16(sd
, REG_VREF_F1_S
, vref_f1_start
& MASK_VHREF
);
813 io_write(sd
, REG_VREF_F1_WIDTH
, vref_f1_width
);
814 /* vertical reference f2 start/end */
815 io_write16(sd
, REG_VREF_F2_S
, vref_f2_start
& MASK_VHREF
);
816 io_write(sd
, REG_VREF_F2_WIDTH
, vref_f2_width
);
818 /* F1/F2 FREF, field polarity */
819 reg
= fieldref_f1_start
& MASK_VHREF
;
820 reg
|= field_polarity
<< 8;
821 io_write16(sd
, REG_FREF_F1_S
, reg
);
822 reg
= fieldref_f2_start
& MASK_VHREF
;
823 io_write16(sd
, REG_FREF_F2_S
, reg
);
826 /* Configure Video Output port signals */
828 tda1997x_configure_vidout(struct tda1997x_state
*state
)
830 struct v4l2_subdev
*sd
= &state
->sd
;
831 struct tda1997x_platform_data
*pdata
= &state
->pdata
;
835 /* Configure pixel clock generator: delay, polarity, rate */
836 reg
= (state
->vid_fmt
== OF_FMT_422_CCIR
) ?
837 PCLK_SEL_X2
: PCLK_SEL_X1
;
838 reg
|= pdata
->vidout_delay_pclk
<< PCLK_DELAY_SHIFT
;
839 reg
|= pdata
->vidout_inv_pclk
<< PCLK_INV_SHIFT
;
840 io_write(sd
, REG_PCLK
, reg
);
842 /* Configure pre-filter */
843 prefilter
= 0; /* filters off */
844 /* YUV422 mode requires conversion */
845 if ((state
->vid_fmt
== OF_FMT_422_SMPT
) ||
846 (state
->vid_fmt
== OF_FMT_422_CCIR
)) {
847 /* 2/7 taps for Rv and Bu */
848 prefilter
= FILTERS_CTRL_2_7TAP
<< FILTERS_CTRL_BU_SHIFT
|
849 FILTERS_CTRL_2_7TAP
<< FILTERS_CTRL_RV_SHIFT
;
851 io_write(sd
, REG_FILTERS_CTRL
, prefilter
);
853 /* Configure video port */
854 reg
= state
->vid_fmt
& OF_FMT_MASK
;
855 if (state
->vid_fmt
== OF_FMT_422_CCIR
)
856 reg
|= (OF_BLK
| OF_TRC
);
858 io_write(sd
, REG_OF
, reg
);
860 /* Configure formatter and conversions */
861 reg
= io_read(sd
, REG_VDP_CTRL
);
862 /* pre-filter is needed unless (REG_FILTERS_CTRL == 0) */
864 reg
|= VDP_CTRL_PREFILTER_BP
;
866 reg
&= ~VDP_CTRL_PREFILTER_BP
;
867 /* formatter is needed for YUV422 and for trc/blc codes */
868 if (state
->vid_fmt
== OF_FMT_444
)
869 reg
|= VDP_CTRL_FORMATTER_BP
;
870 /* formatter and compdel needed for timing/blanking codes */
872 reg
&= ~(VDP_CTRL_FORMATTER_BP
| VDP_CTRL_COMPDEL_BP
);
873 /* activate compdel for small sync delays */
874 if ((pdata
->vidout_delay_vs
< 4) || (pdata
->vidout_delay_hs
< 4))
875 reg
&= ~VDP_CTRL_COMPDEL_BP
;
876 io_write(sd
, REG_VDP_CTRL
, reg
);
878 /* Configure DE output signal: delay, polarity, and source */
879 reg
= pdata
->vidout_delay_de
<< DE_FREF_DELAY_SHIFT
|
880 pdata
->vidout_inv_de
<< DE_FREF_INV_SHIFT
|
881 pdata
->vidout_sel_de
<< DE_FREF_SEL_SHIFT
;
882 io_write(sd
, REG_DE_FREF
, reg
);
884 /* Configure HS/HREF output signal: delay, polarity, and source */
885 if (state
->vid_fmt
!= OF_FMT_422_CCIR
) {
886 reg
= pdata
->vidout_delay_hs
<< HS_HREF_DELAY_SHIFT
|
887 pdata
->vidout_inv_hs
<< HS_HREF_INV_SHIFT
|
888 pdata
->vidout_sel_hs
<< HS_HREF_SEL_SHIFT
;
890 reg
= HS_HREF_SEL_NONE
<< HS_HREF_SEL_SHIFT
;
891 io_write(sd
, REG_HS_HREF
, reg
);
893 /* Configure VS/VREF output signal: delay, polarity, and source */
894 if (state
->vid_fmt
!= OF_FMT_422_CCIR
) {
895 reg
= pdata
->vidout_delay_vs
<< VS_VREF_DELAY_SHIFT
|
896 pdata
->vidout_inv_vs
<< VS_VREF_INV_SHIFT
|
897 pdata
->vidout_sel_vs
<< VS_VREF_SEL_SHIFT
;
899 reg
= VS_VREF_SEL_NONE
<< VS_VREF_SEL_SHIFT
;
900 io_write(sd
, REG_VS_VREF
, reg
);
905 /* Configure Audio output port signals */
907 tda1997x_configure_audout(struct v4l2_subdev
*sd
, u8 channel_assignment
)
909 struct tda1997x_state
*state
= to_state(sd
);
910 struct tda1997x_platform_data
*pdata
= &state
->pdata
;
911 bool sp_used_by_fifo
= 1;
914 if (!pdata
->audout_format
)
917 /* channel assignment (CEA-861-D Table 20) */
918 io_write(sd
, REG_AUDIO_PATH
, channel_assignment
);
920 /* Audio output configuration */
922 switch (pdata
->audout_format
) {
923 case AUDFMT_TYPE_I2S
:
924 reg
|= AUDCFG_BUS_I2S
<< AUDCFG_BUS_SHIFT
;
926 case AUDFMT_TYPE_SPDIF
:
927 reg
|= AUDCFG_BUS_SPDIF
<< AUDCFG_BUS_SHIFT
;
930 switch (state
->audio_type
) {
931 case AUDCFG_TYPE_PCM
:
932 reg
|= AUDCFG_TYPE_PCM
<< AUDCFG_TYPE_SHIFT
;
934 case AUDCFG_TYPE_OBA
:
935 reg
|= AUDCFG_TYPE_OBA
<< AUDCFG_TYPE_SHIFT
;
937 case AUDCFG_TYPE_DST
:
938 reg
|= AUDCFG_TYPE_DST
<< AUDCFG_TYPE_SHIFT
;
941 case AUDCFG_TYPE_HBR
:
942 reg
|= AUDCFG_TYPE_HBR
<< AUDCFG_TYPE_SHIFT
;
943 if (pdata
->audout_layout
== 1) {
944 /* demuxed via AP0:AP3 */
945 reg
|= AUDCFG_HBR_DEMUX
<< AUDCFG_HBR_SHIFT
;
946 if (pdata
->audout_format
== AUDFMT_TYPE_SPDIF
)
949 /* straight via AP0 */
950 reg
|= AUDCFG_HBR_STRAIGHT
<< AUDCFG_HBR_SHIFT
;
954 if (pdata
->audout_width
== 32)
955 reg
|= AUDCFG_I2SW_32
<< AUDCFG_I2SW_SHIFT
;
957 reg
|= AUDCFG_I2SW_16
<< AUDCFG_I2SW_SHIFT
;
959 /* automatic hardware mute */
960 if (pdata
->audio_auto_mute
)
961 reg
|= AUDCFG_AUTO_MUTE_EN
;
963 if (pdata
->audout_invert_clk
)
964 reg
|= AUDCFG_CLK_INVERT
;
965 io_write(sd
, REG_AUDCFG
, reg
);
968 reg
= (pdata
->audout_layout
) ? AUDIO_LAYOUT_LAYOUT1
: 0;
969 if (!pdata
->audout_layoutauto
)
970 reg
|= AUDIO_LAYOUT_MANUAL
;
972 reg
|= AUDIO_LAYOUT_SP_FLAG
;
973 io_write(sd
, REG_AUDIO_LAYOUT
, reg
);
975 /* FIFO Latency value */
976 io_write(sd
, REG_FIFO_LATENCY_VAL
, 0x80);
978 /* Audio output port config */
979 if (sp_used_by_fifo
) {
980 reg
= AUDIO_OUT_ENABLE_AP0
;
981 if (channel_assignment
>= 0x01)
982 reg
|= AUDIO_OUT_ENABLE_AP1
;
983 if (channel_assignment
>= 0x04)
984 reg
|= AUDIO_OUT_ENABLE_AP2
;
985 if (channel_assignment
>= 0x0c)
986 reg
|= AUDIO_OUT_ENABLE_AP3
;
987 /* specific cases where AP1 is not used */
988 if ((channel_assignment
== 0x04)
989 || (channel_assignment
== 0x08)
990 || (channel_assignment
== 0x0c)
991 || (channel_assignment
== 0x10)
992 || (channel_assignment
== 0x14)
993 || (channel_assignment
== 0x18)
994 || (channel_assignment
== 0x1c))
995 reg
&= ~AUDIO_OUT_ENABLE_AP1
;
996 /* specific cases where AP2 is not used */
997 if ((channel_assignment
>= 0x14)
998 && (channel_assignment
<= 0x17))
999 reg
&= ~AUDIO_OUT_ENABLE_AP2
;
1001 reg
= AUDIO_OUT_ENABLE_AP3
|
1002 AUDIO_OUT_ENABLE_AP2
|
1003 AUDIO_OUT_ENABLE_AP1
|
1004 AUDIO_OUT_ENABLE_AP0
;
1006 if (pdata
->audout_format
== AUDFMT_TYPE_I2S
)
1007 reg
|= (AUDIO_OUT_ENABLE_ACLK
| AUDIO_OUT_ENABLE_WS
);
1008 io_write(sd
, REG_AUDIO_OUT_ENABLE
, reg
);
1010 /* reset test mode to normal audio freq auto selection */
1011 io_write(sd
, REG_TEST_MODE
, 0x00);
1016 /* Soft Reset of specific hdmi info */
1018 tda1997x_hdmi_info_reset(struct v4l2_subdev
*sd
, u8 info_rst
, bool reset_sus
)
1022 /* reset infoframe engine packets */
1023 reg
= io_read(sd
, REG_HDMI_INFO_RST
);
1024 io_write(sd
, REG_HDMI_INFO_RST
, info_rst
);
1026 /* if infoframe engine has been reset clear INT_FLG_MODE */
1027 if (reg
& RESET_IF
) {
1028 reg
= io_read(sd
, REG_INT_FLG_CLR_MODE
);
1029 io_write(sd
, REG_INT_FLG_CLR_MODE
, reg
);
1032 /* Disable REFTIM to restart start-up-sequencer (SUS) */
1033 reg
= io_read(sd
, REG_RATE_CTRL
);
1034 reg
&= ~RATE_REFTIM_ENABLE
;
1036 reg
|= RATE_REFTIM_ENABLE
;
1037 reg
= io_write(sd
, REG_RATE_CTRL
, reg
);
1043 tda1997x_power_mode(struct tda1997x_state
*state
, bool enable
)
1045 struct v4l2_subdev
*sd
= &state
->sd
;
1049 /* Automatic control of TMDS */
1050 io_write(sd
, REG_PON_OVR_EN
, PON_DIS
);
1051 /* Enable current bias unit */
1052 io_write(sd
, REG_CFG1
, PON_EN
);
1053 /* Enable deep color PLL */
1054 io_write(sd
, REG_DEEP_PLL7_BYP
, PON_DIS
);
1055 /* Output buffers active */
1056 reg
= io_read(sd
, REG_OF
);
1057 reg
&= ~OF_VP_ENABLE
;
1058 io_write(sd
, REG_OF
, reg
);
1060 /* Power down EDID mode sequence */
1061 /* Output buffers in HiZ */
1062 reg
= io_read(sd
, REG_OF
);
1063 reg
|= OF_VP_ENABLE
;
1064 io_write(sd
, REG_OF
, reg
);
1065 /* Disable deep color PLL */
1066 io_write(sd
, REG_DEEP_PLL7_BYP
, PON_EN
);
1067 /* Disable current bias unit */
1068 io_write(sd
, REG_CFG1
, PON_DIS
);
1069 /* Manual control of TMDS */
1070 io_write(sd
, REG_PON_OVR_EN
, PON_EN
);
1075 tda1997x_detect_tx_5v(struct v4l2_subdev
*sd
)
1077 u8 reg
= io_read(sd
, REG_DETECT_5V
);
1079 return ((reg
& DETECT_5V_SEL
) ? 1 : 0);
1083 tda1997x_detect_tx_hpd(struct v4l2_subdev
*sd
)
1085 u8 reg
= io_read(sd
, REG_DETECT_5V
);
1087 return ((reg
& DETECT_HPD
) ? 1 : 0);
1091 tda1997x_detect_std(struct tda1997x_state
*state
,
1092 struct v4l2_dv_timings
*timings
)
1094 struct v4l2_subdev
*sd
= &state
->sd
;
1101 * Read the FMT registers
1102 * REG_V_PER: Period of a frame (or two fields) in MCLK(27MHz) cycles
1103 * REG_H_PER: Period of a line in MCLK(27MHz) cycles
1104 * REG_HS_WIDTH: Period of horiz sync pulse in MCLK(27MHz) cycles
1106 vper
= io_read24(sd
, REG_V_PER
) & MASK_VPER
;
1107 hper
= io_read16(sd
, REG_H_PER
) & MASK_HPER
;
1108 hsper
= io_read16(sd
, REG_HS_WIDTH
) & MASK_HSWIDTH
;
1109 v4l2_dbg(1, debug
, sd
, "Signal Timings: %u/%u/%u\n", vper
, hper
, hsper
);
1110 if (!vper
|| !hper
|| !hsper
)
1113 for (i
= 0; v4l2_dv_timings_presets
[i
].bt
.width
; i
++) {
1114 const struct v4l2_bt_timings
*bt
;
1115 u32 lines
, width
, _hper
, _hsper
;
1116 u32 vmin
, vmax
, hmin
, hmax
, hsmin
, hsmax
;
1117 bool vmatch
, hmatch
, hsmatch
;
1119 bt
= &v4l2_dv_timings_presets
[i
].bt
;
1120 width
= V4L2_DV_BT_FRAME_WIDTH(bt
);
1121 lines
= V4L2_DV_BT_FRAME_HEIGHT(bt
);
1122 _hper
= (u32
)bt
->pixelclock
/ width
;
1126 vmin
= ((27000000 / 1000) * 993) / _hper
* lines
;
1127 vmax
= ((27000000 / 1000) * 1007) / _hper
* lines
;
1129 hmin
= ((27000000 / 100) * 99) / _hper
;
1130 hmax
= ((27000000 / 100) * 101) / _hper
;
1131 /* hsper +/- 2 (take care to avoid 32bit overflow) */
1132 _hsper
= 27000 * bt
->hsync
/ ((u32
)bt
->pixelclock
/1000);
1136 /* vmatch matches the framerate */
1137 vmatch
= ((vper
<= vmax
) && (vper
>= vmin
)) ? 1 : 0;
1138 /* hmatch matches the width */
1139 hmatch
= ((hper
<= hmax
) && (hper
>= hmin
)) ? 1 : 0;
1140 /* hsmatch matches the hswidth */
1141 hsmatch
= ((hsper
<= hsmax
) && (hsper
>= hsmin
)) ? 1 : 0;
1142 if (hmatch
&& vmatch
&& hsmatch
) {
1143 v4l2_print_dv_timings(sd
->name
, "Detected format: ",
1144 &v4l2_dv_timings_presets
[i
],
1147 *timings
= v4l2_dv_timings_presets
[i
];
1152 v4l_err(state
->client
, "no resolution match for timings: %d/%d/%d\n",
1157 /* some sort of errata workaround for chip revision 0 (N1) */
1158 static void tda1997x_reset_n1(struct tda1997x_state
*state
)
1160 struct v4l2_subdev
*sd
= &state
->sd
;
1163 /* clear HDMI mode flag in BCAPS */
1164 io_write(sd
, REG_CLK_CFG
, CLK_CFG_SEL_ACLK_EN
| CLK_CFG_SEL_ACLK
);
1165 io_write(sd
, REG_PON_OVR_EN
, PON_EN
);
1166 io_write(sd
, REG_PON_CBIAS
, PON_EN
);
1167 io_write(sd
, REG_PON_PLL
, PON_EN
);
1169 reg
= io_read(sd
, REG_MODE_REC_CFG1
);
1172 io_write(sd
, REG_MODE_REC_CFG1
, reg
);
1173 io_write(sd
, REG_CLK_CFG
, CLK_CFG_DIS
);
1174 io_write(sd
, REG_PON_OVR_EN
, PON_DIS
);
1175 reg
= io_read(sd
, REG_MODE_REC_CFG1
);
1177 io_write(sd
, REG_MODE_REC_CFG1
, reg
);
1181 * Activity detection must only be notified when stable_clk_x AND active_x
1182 * bits are set to 1. If only stable_clk_x bit is set to 1 but not
1183 * active_x, it means that the TMDS clock is not in the defined range
1184 * and activity detection must not be notified.
1187 tda1997x_read_activity_status_regs(struct v4l2_subdev
*sd
)
1191 /* Read CLK_A_STATUS register */
1192 reg
= io_read(sd
, REG_CLK_A_STATUS
);
1193 /* ignore if not active */
1194 if ((reg
& MASK_CLK_STABLE
) && !(reg
& MASK_CLK_ACTIVE
))
1195 reg
&= ~MASK_CLK_STABLE
;
1196 status
|= ((reg
& MASK_CLK_STABLE
) >> 2);
1198 /* Read CLK_B_STATUS register */
1199 reg
= io_read(sd
, REG_CLK_B_STATUS
);
1200 /* ignore if not active */
1201 if ((reg
& MASK_CLK_STABLE
) && !(reg
& MASK_CLK_ACTIVE
))
1202 reg
&= ~MASK_CLK_STABLE
;
1203 status
|= ((reg
& MASK_CLK_STABLE
) >> 1);
1205 /* Read the SUS_STATUS register */
1206 reg
= io_read(sd
, REG_SUS_STATUS
);
1208 /* If state = 5 => TMDS is locked */
1209 if ((reg
& MASK_SUS_STATUS
) == LAST_STATE_REACHED
)
1210 status
|= MASK_SUS_STATE
;
1212 status
&= ~MASK_SUS_STATE
;
1218 set_rgb_quantization_range(struct tda1997x_state
*state
)
1220 struct v4l2_hdmi_colorimetry
*c
= &state
->colorimetry
;
1222 state
->colorimetry
= v4l2_hdmi_rx_colorimetry(&state
->avi_infoframe
,
1224 state
->timings
.bt
.height
);
1225 /* If ycbcr_enc is V4L2_YCBCR_ENC_DEFAULT, we receive RGB */
1226 if (c
->ycbcr_enc
== V4L2_YCBCR_ENC_DEFAULT
) {
1227 switch (state
->rgb_quantization_range
) {
1228 case V4L2_DV_RGB_RANGE_LIMITED
:
1229 c
->quantization
= V4L2_QUANTIZATION_FULL_RANGE
;
1231 case V4L2_DV_RGB_RANGE_FULL
:
1232 c
->quantization
= V4L2_QUANTIZATION_LIM_RANGE
;
1236 v4l_dbg(1, debug
, state
->client
,
1237 "colorspace=%d/%d colorimetry=%d range=%s content=%d\n",
1238 state
->avi_infoframe
.colorspace
, c
->colorspace
,
1239 state
->avi_infoframe
.colorimetry
,
1240 v4l2_quantization_names
[c
->quantization
],
1241 state
->avi_infoframe
.content_type
);
1244 /* parse an infoframe and do some sanity checks on it */
1246 tda1997x_parse_infoframe(struct tda1997x_state
*state
, u16 addr
)
1248 struct v4l2_subdev
*sd
= &state
->sd
;
1249 union hdmi_infoframe frame
;
1255 len
= io_readn(sd
, addr
, sizeof(buffer
), buffer
);
1256 err
= hdmi_infoframe_unpack(&frame
, buffer
, sizeof(buffer
));
1258 v4l_err(state
->client
,
1259 "failed parsing %d byte infoframe: 0x%04x/0x%02x\n",
1260 len
, addr
, buffer
[0]);
1263 hdmi_infoframe_log(KERN_INFO
, &state
->client
->dev
, &frame
);
1264 switch (frame
.any
.type
) {
1265 /* Audio InfoFrame: see HDMI spec 8.2.2 */
1266 case HDMI_INFOFRAME_TYPE_AUDIO
:
1268 switch (frame
.audio
.sample_frequency
) {
1269 case HDMI_AUDIO_SAMPLE_FREQUENCY_32000
:
1270 state
->audio_samplerate
= 32000;
1272 case HDMI_AUDIO_SAMPLE_FREQUENCY_44100
:
1273 state
->audio_samplerate
= 44100;
1275 case HDMI_AUDIO_SAMPLE_FREQUENCY_48000
:
1276 state
->audio_samplerate
= 48000;
1278 case HDMI_AUDIO_SAMPLE_FREQUENCY_88200
:
1279 state
->audio_samplerate
= 88200;
1281 case HDMI_AUDIO_SAMPLE_FREQUENCY_96000
:
1282 state
->audio_samplerate
= 96000;
1284 case HDMI_AUDIO_SAMPLE_FREQUENCY_176400
:
1285 state
->audio_samplerate
= 176400;
1287 case HDMI_AUDIO_SAMPLE_FREQUENCY_192000
:
1288 state
->audio_samplerate
= 192000;
1291 case HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM
:
1296 switch (frame
.audio
.sample_size
) {
1297 case HDMI_AUDIO_SAMPLE_SIZE_16
:
1298 state
->audio_samplesize
= 16;
1300 case HDMI_AUDIO_SAMPLE_SIZE_20
:
1301 state
->audio_samplesize
= 20;
1303 case HDMI_AUDIO_SAMPLE_SIZE_24
:
1304 state
->audio_samplesize
= 24;
1306 case HDMI_AUDIO_SAMPLE_SIZE_STREAM
:
1312 state
->audio_channels
= frame
.audio
.channels
;
1313 if (frame
.audio
.channel_allocation
&&
1314 frame
.audio
.channel_allocation
!= state
->audio_ch_alloc
) {
1315 /* use the channel assignment from the infoframe */
1316 state
->audio_ch_alloc
= frame
.audio
.channel_allocation
;
1317 tda1997x_configure_audout(sd
, state
->audio_ch_alloc
);
1318 /* reset the audio FIFO */
1319 tda1997x_hdmi_info_reset(sd
, RESET_AUDIO
, false);
1323 /* Auxiliary Video information (AVI) InfoFrame: see HDMI spec 8.2.1 */
1324 case HDMI_INFOFRAME_TYPE_AVI
:
1325 state
->avi_infoframe
= frame
.avi
;
1326 set_rgb_quantization_range(state
);
1328 /* configure upsampler: 0=bypass 1=repeatchroma 2=interpolate */
1329 reg
= io_read(sd
, REG_PIX_REPEAT
);
1330 reg
&= ~PIX_REPEAT_MASK_UP_SEL
;
1331 if (frame
.avi
.colorspace
== HDMI_COLORSPACE_YUV422
)
1332 reg
|= (PIX_REPEAT_CHROMA
<< PIX_REPEAT_SHIFT
);
1333 io_write(sd
, REG_PIX_REPEAT
, reg
);
1335 /* ConfigurePixelRepeater: repeat n-times each pixel */
1336 reg
= io_read(sd
, REG_PIX_REPEAT
);
1337 reg
&= ~PIX_REPEAT_MASK_REP
;
1338 reg
|= frame
.avi
.pixel_repeat
;
1339 io_write(sd
, REG_PIX_REPEAT
, reg
);
1341 /* configure the receiver with the new colorspace */
1342 tda1997x_configure_csc(sd
);
1350 static void tda1997x_irq_sus(struct tda1997x_state
*state
, u8
*flags
)
1352 struct v4l2_subdev
*sd
= &state
->sd
;
1355 source
= io_read(sd
, REG_INT_FLG_CLR_SUS
);
1356 io_write(sd
, REG_INT_FLG_CLR_SUS
, source
);
1358 if (source
& MASK_MPT
) {
1359 /* reset MTP in use flag if set */
1360 if (state
->mptrw_in_progress
)
1361 state
->mptrw_in_progress
= 0;
1364 if (source
& MASK_SUS_END
) {
1365 /* reset audio FIFO */
1366 reg
= io_read(sd
, REG_HDMI_INFO_RST
);
1367 reg
|= MASK_SR_FIFO_FIFO_CTRL
;
1368 io_write(sd
, REG_HDMI_INFO_RST
, reg
);
1369 reg
&= ~MASK_SR_FIFO_FIFO_CTRL
;
1370 io_write(sd
, REG_HDMI_INFO_RST
, reg
);
1372 /* reset HDMI flags */
1373 state
->hdmi_status
= 0;
1376 /* filter FMT interrupt based on SUS state */
1377 reg
= io_read(sd
, REG_SUS_STATUS
);
1378 if (((reg
& MASK_SUS_STATUS
) != LAST_STATE_REACHED
)
1379 || (source
& MASK_MPT
)) {
1380 source
&= ~MASK_FMT
;
1383 if (source
& (MASK_FMT
| MASK_SUS_END
)) {
1384 reg
= io_read(sd
, REG_SUS_STATUS
);
1385 if ((reg
& MASK_SUS_STATUS
) != LAST_STATE_REACHED
) {
1386 v4l_err(state
->client
, "BAD SUS STATUS\n");
1390 tda1997x_detect_std(state
, NULL
);
1391 /* notify user of change in resolution */
1392 v4l2_subdev_notify_event(&state
->sd
, &tda1997x_ev_fmt
);
1396 static void tda1997x_irq_ddc(struct tda1997x_state
*state
, u8
*flags
)
1398 struct v4l2_subdev
*sd
= &state
->sd
;
1401 source
= io_read(sd
, REG_INT_FLG_CLR_DDC
);
1402 io_write(sd
, REG_INT_FLG_CLR_DDC
, source
);
1403 if (source
& MASK_EDID_MTP
) {
1404 /* reset MTP in use flag if set */
1405 if (state
->mptrw_in_progress
)
1406 state
->mptrw_in_progress
= 0;
1409 /* Detection of +5V */
1410 if (source
& MASK_DET_5V
) {
1411 v4l2_ctrl_s_ctrl(state
->detect_tx_5v_ctrl
,
1412 tda1997x_detect_tx_5v(sd
));
1416 static void tda1997x_irq_rate(struct tda1997x_state
*state
, u8
*flags
)
1418 struct v4l2_subdev
*sd
= &state
->sd
;
1423 source
= io_read(sd
, REG_INT_FLG_CLR_RATE
);
1424 io_write(sd
, REG_INT_FLG_CLR_RATE
, source
);
1426 /* read status regs */
1427 irq_status
= tda1997x_read_activity_status_regs(sd
);
1430 * read clock status reg until INT_FLG_CLR_RATE is still 0
1431 * after the read to make sure its the last one
1435 irq_status
= tda1997x_read_activity_status_regs(sd
);
1436 reg
= io_read(sd
, REG_INT_FLG_CLR_RATE
);
1437 io_write(sd
, REG_INT_FLG_CLR_RATE
, reg
);
1441 /* we only pay attention to stability change events */
1442 if (source
& (MASK_RATE_A_ST
| MASK_RATE_B_ST
)) {
1443 int input
= (source
& MASK_RATE_A_ST
)?0:1;
1447 if ((irq_status
& mask
) != (state
->activity_status
& mask
)) {
1449 if ((irq_status
& mask
) == 0) {
1450 v4l_info(state
->client
,
1451 "HDMI-%c: Digital Activity Lost\n",
1454 /* bypass up/down sampler and pixel repeater */
1455 reg
= io_read(sd
, REG_PIX_REPEAT
);
1456 reg
&= ~PIX_REPEAT_MASK_UP_SEL
;
1457 reg
&= ~PIX_REPEAT_MASK_REP
;
1458 io_write(sd
, REG_PIX_REPEAT
, reg
);
1460 if (state
->chip_revision
== 0)
1461 tda1997x_reset_n1(state
);
1463 state
->input_detect
[input
] = 0;
1464 v4l2_subdev_notify_event(sd
, &tda1997x_ev_fmt
);
1467 /* activity detected */
1469 v4l_info(state
->client
,
1470 "HDMI-%c: Digital Activity Detected\n",
1472 state
->input_detect
[input
] = 1;
1475 /* hold onto current state */
1476 state
->activity_status
= (irq_status
& mask
);
1481 static void tda1997x_irq_info(struct tda1997x_state
*state
, u8
*flags
)
1483 struct v4l2_subdev
*sd
= &state
->sd
;
1486 source
= io_read(sd
, REG_INT_FLG_CLR_INFO
);
1487 io_write(sd
, REG_INT_FLG_CLR_INFO
, source
);
1489 /* Audio infoframe */
1490 if (source
& MASK_AUD_IF
) {
1491 tda1997x_parse_infoframe(state
, AUD_IF
);
1492 source
&= ~MASK_AUD_IF
;
1495 /* Source Product Descriptor infoframe change */
1496 if (source
& MASK_SPD_IF
) {
1497 tda1997x_parse_infoframe(state
, SPD_IF
);
1498 source
&= ~MASK_SPD_IF
;
1501 /* Auxiliary Video Information infoframe */
1502 if (source
& MASK_AVI_IF
) {
1503 tda1997x_parse_infoframe(state
, AVI_IF
);
1504 source
&= ~MASK_AVI_IF
;
1508 static void tda1997x_irq_audio(struct tda1997x_state
*state
, u8
*flags
)
1510 struct v4l2_subdev
*sd
= &state
->sd
;
1513 source
= io_read(sd
, REG_INT_FLG_CLR_AUDIO
);
1514 io_write(sd
, REG_INT_FLG_CLR_AUDIO
, source
);
1516 /* reset audio FIFO on FIFO pointer error or audio mute */
1517 if (source
& MASK_ERROR_FIFO_PT
||
1518 source
& MASK_MUTE_FLG
) {
1519 /* audio reset audio FIFO */
1520 reg
= io_read(sd
, REG_SUS_STATUS
);
1521 if ((reg
& MASK_SUS_STATUS
) == LAST_STATE_REACHED
) {
1522 reg
= io_read(sd
, REG_HDMI_INFO_RST
);
1523 reg
|= MASK_SR_FIFO_FIFO_CTRL
;
1524 io_write(sd
, REG_HDMI_INFO_RST
, reg
);
1525 reg
&= ~MASK_SR_FIFO_FIFO_CTRL
;
1526 io_write(sd
, REG_HDMI_INFO_RST
, reg
);
1527 /* reset channel status IT if present */
1528 source
&= ~(MASK_CH_STATE
);
1531 if (source
& MASK_AUDIO_FREQ_FLG
) {
1532 static const int freq
[] = {
1533 0, 32000, 44100, 48000, 88200, 96000, 176400, 192000
1536 reg
= io_read(sd
, REG_AUDIO_FREQ
);
1537 state
->audio_samplerate
= freq
[reg
& 7];
1538 v4l_info(state
->client
, "Audio Frequency Change: %dHz\n",
1539 state
->audio_samplerate
);
1541 if (source
& MASK_AUDIO_FLG
) {
1542 reg
= io_read(sd
, REG_AUDIO_FLAGS
);
1543 if (reg
& BIT(AUDCFG_TYPE_DST
))
1544 state
->audio_type
= AUDCFG_TYPE_DST
;
1545 if (reg
& BIT(AUDCFG_TYPE_OBA
))
1546 state
->audio_type
= AUDCFG_TYPE_OBA
;
1547 if (reg
& BIT(AUDCFG_TYPE_HBR
))
1548 state
->audio_type
= AUDCFG_TYPE_HBR
;
1549 if (reg
& BIT(AUDCFG_TYPE_PCM
))
1550 state
->audio_type
= AUDCFG_TYPE_PCM
;
1551 v4l_info(state
->client
, "Audio Type: %s\n",
1552 audtype_names
[state
->audio_type
]);
1556 static void tda1997x_irq_hdcp(struct tda1997x_state
*state
, u8
*flags
)
1558 struct v4l2_subdev
*sd
= &state
->sd
;
1561 source
= io_read(sd
, REG_INT_FLG_CLR_HDCP
);
1562 io_write(sd
, REG_INT_FLG_CLR_HDCP
, source
);
1564 /* reset MTP in use flag if set */
1565 if (source
& MASK_HDCP_MTP
)
1566 state
->mptrw_in_progress
= 0;
1567 if (source
& MASK_STATE_C5
) {
1568 /* REPEATER: mask AUDIO and IF irqs to avoid IF during auth */
1569 reg
= io_read(sd
, REG_INT_MASK_TOP
);
1570 reg
&= ~(INTERRUPT_AUDIO
| INTERRUPT_INFO
);
1571 io_write(sd
, REG_INT_MASK_TOP
, reg
);
1572 *flags
&= (INTERRUPT_AUDIO
| INTERRUPT_INFO
);
1576 static irqreturn_t
tda1997x_isr_thread(int irq
, void *d
)
1578 struct tda1997x_state
*state
= d
;
1579 struct v4l2_subdev
*sd
= &state
->sd
;
1582 mutex_lock(&state
->lock
);
1584 /* read interrupt flags */
1585 flags
= io_read(sd
, REG_INT_FLG_CLR_TOP
);
1589 /* SUS interrupt source (Input activity events) */
1590 if (flags
& INTERRUPT_SUS
)
1591 tda1997x_irq_sus(state
, &flags
);
1592 /* DDC interrupt source (Display Data Channel) */
1593 else if (flags
& INTERRUPT_DDC
)
1594 tda1997x_irq_ddc(state
, &flags
);
1595 /* RATE interrupt source (Digital Input activity) */
1596 else if (flags
& INTERRUPT_RATE
)
1597 tda1997x_irq_rate(state
, &flags
);
1598 /* Infoframe change interrupt */
1599 else if (flags
& INTERRUPT_INFO
)
1600 tda1997x_irq_info(state
, &flags
);
1601 /* Audio interrupt source:
1602 * freq change, DST,OBA,HBR,ASP flags, mute, FIFO err
1604 else if (flags
& INTERRUPT_AUDIO
)
1605 tda1997x_irq_audio(state
, &flags
);
1606 /* HDCP interrupt source (content protection) */
1607 if (flags
& INTERRUPT_HDCP
)
1608 tda1997x_irq_hdcp(state
, &flags
);
1609 } while (flags
!= 0);
1610 mutex_unlock(&state
->lock
);
1615 /* -----------------------------------------------------------------------------
1616 * v4l2_subdev_video_ops
1620 tda1997x_g_input_status(struct v4l2_subdev
*sd
, u32
*status
)
1622 struct tda1997x_state
*state
= to_state(sd
);
1627 mutex_lock(&state
->lock
);
1628 vper
= io_read24(sd
, REG_V_PER
) & MASK_VPER
;
1629 hper
= io_read16(sd
, REG_H_PER
) & MASK_HPER
;
1630 hsper
= io_read16(sd
, REG_HS_WIDTH
) & MASK_HSWIDTH
;
1632 * The tda1997x supports A/B inputs but only a single output.
1633 * The irq handler monitors for timing changes on both inputs and
1634 * sets the input_detect array to 0|1 depending on signal presence.
1635 * I believe selection of A vs B is automatic.
1637 * The vper/hper/hsper registers provide the frame period, line period
1638 * and horiz sync period (units of MCLK clock cycles (27MHz)) and
1639 * testing shows these values to be random if no signal is present
1642 v4l2_dbg(1, debug
, sd
, "inputs:%d/%d timings:%d/%d/%d\n",
1643 state
->input_detect
[0], state
->input_detect
[1],
1645 if (!state
->input_detect
[0] && !state
->input_detect
[1])
1646 *status
= V4L2_IN_ST_NO_SIGNAL
;
1647 else if (!vper
|| !hper
|| !hsper
)
1648 *status
= V4L2_IN_ST_NO_SYNC
;
1651 mutex_unlock(&state
->lock
);
1656 static int tda1997x_s_dv_timings(struct v4l2_subdev
*sd
,
1657 struct v4l2_dv_timings
*timings
)
1659 struct tda1997x_state
*state
= to_state(sd
);
1661 v4l_dbg(1, debug
, state
->client
, "%s\n", __func__
);
1663 if (v4l2_match_dv_timings(&state
->timings
, timings
, 0, false))
1664 return 0; /* no changes */
1666 if (!v4l2_valid_dv_timings(timings
, &tda1997x_dv_timings_cap
,
1670 mutex_lock(&state
->lock
);
1671 state
->timings
= *timings
;
1672 /* setup frame detection window and VHREF timing generator */
1673 tda1997x_configure_vhref(sd
);
1674 /* configure colorspace conversion */
1675 tda1997x_configure_csc(sd
);
1676 mutex_unlock(&state
->lock
);
1681 static int tda1997x_g_dv_timings(struct v4l2_subdev
*sd
,
1682 struct v4l2_dv_timings
*timings
)
1684 struct tda1997x_state
*state
= to_state(sd
);
1686 v4l_dbg(1, debug
, state
->client
, "%s\n", __func__
);
1687 mutex_lock(&state
->lock
);
1688 *timings
= state
->timings
;
1689 mutex_unlock(&state
->lock
);
1694 static int tda1997x_query_dv_timings(struct v4l2_subdev
*sd
,
1695 struct v4l2_dv_timings
*timings
)
1697 struct tda1997x_state
*state
= to_state(sd
);
1699 v4l_dbg(1, debug
, state
->client
, "%s\n", __func__
);
1700 memset(timings
, 0, sizeof(struct v4l2_dv_timings
));
1701 mutex_lock(&state
->lock
);
1702 tda1997x_detect_std(state
, timings
);
1703 mutex_unlock(&state
->lock
);
1708 static const struct v4l2_subdev_video_ops tda1997x_video_ops
= {
1709 .g_input_status
= tda1997x_g_input_status
,
1710 .s_dv_timings
= tda1997x_s_dv_timings
,
1711 .g_dv_timings
= tda1997x_g_dv_timings
,
1712 .query_dv_timings
= tda1997x_query_dv_timings
,
1716 /* -----------------------------------------------------------------------------
1717 * v4l2_subdev_pad_ops
1720 static int tda1997x_init_cfg(struct v4l2_subdev
*sd
,
1721 struct v4l2_subdev_pad_config
*cfg
)
1723 struct tda1997x_state
*state
= to_state(sd
);
1724 struct v4l2_mbus_framefmt
*mf
;
1726 mf
= v4l2_subdev_get_try_format(sd
, cfg
, 0);
1727 mf
->code
= state
->mbus_codes
[0];
1732 static int tda1997x_enum_mbus_code(struct v4l2_subdev
*sd
,
1733 struct v4l2_subdev_pad_config
*cfg
,
1734 struct v4l2_subdev_mbus_code_enum
*code
)
1736 struct tda1997x_state
*state
= to_state(sd
);
1738 v4l_dbg(1, debug
, state
->client
, "%s %d\n", __func__
, code
->index
);
1739 if (code
->index
>= ARRAY_SIZE(state
->mbus_codes
))
1742 if (!state
->mbus_codes
[code
->index
])
1745 code
->code
= state
->mbus_codes
[code
->index
];
1750 static void tda1997x_fill_format(struct tda1997x_state
*state
,
1751 struct v4l2_mbus_framefmt
*format
)
1753 const struct v4l2_bt_timings
*bt
;
1755 memset(format
, 0, sizeof(*format
));
1756 bt
= &state
->timings
.bt
;
1757 format
->width
= bt
->width
;
1758 format
->height
= bt
->height
;
1759 format
->colorspace
= state
->colorimetry
.colorspace
;
1760 format
->field
= (bt
->interlaced
) ?
1761 V4L2_FIELD_SEQ_TB
: V4L2_FIELD_NONE
;
1764 static int tda1997x_get_format(struct v4l2_subdev
*sd
,
1765 struct v4l2_subdev_pad_config
*cfg
,
1766 struct v4l2_subdev_format
*format
)
1768 struct tda1997x_state
*state
= to_state(sd
);
1770 v4l_dbg(1, debug
, state
->client
, "%s pad=%d which=%d\n",
1771 __func__
, format
->pad
, format
->which
);
1773 tda1997x_fill_format(state
, &format
->format
);
1775 if (format
->which
== V4L2_SUBDEV_FORMAT_TRY
) {
1776 struct v4l2_mbus_framefmt
*fmt
;
1778 fmt
= v4l2_subdev_get_try_format(sd
, cfg
, format
->pad
);
1779 format
->format
.code
= fmt
->code
;
1781 format
->format
.code
= state
->mbus_code
;
1786 static int tda1997x_set_format(struct v4l2_subdev
*sd
,
1787 struct v4l2_subdev_pad_config
*cfg
,
1788 struct v4l2_subdev_format
*format
)
1790 struct tda1997x_state
*state
= to_state(sd
);
1794 v4l_dbg(1, debug
, state
->client
, "%s pad=%d which=%d fmt=0x%x\n",
1795 __func__
, format
->pad
, format
->which
, format
->format
.code
);
1797 for (i
= 0; i
< ARRAY_SIZE(state
->mbus_codes
); i
++) {
1798 if (format
->format
.code
== state
->mbus_codes
[i
]) {
1799 code
= state
->mbus_codes
[i
];
1804 code
= state
->mbus_codes
[0];
1806 tda1997x_fill_format(state
, &format
->format
);
1807 format
->format
.code
= code
;
1809 if (format
->which
== V4L2_SUBDEV_FORMAT_TRY
) {
1810 struct v4l2_mbus_framefmt
*fmt
;
1812 fmt
= v4l2_subdev_get_try_format(sd
, cfg
, format
->pad
);
1813 *fmt
= format
->format
;
1815 int ret
= tda1997x_setup_format(state
, format
->format
.code
);
1819 /* mbus_code has changed - re-configure csc/vidout */
1820 tda1997x_configure_csc(sd
);
1821 tda1997x_configure_vidout(state
);
1827 static int tda1997x_get_edid(struct v4l2_subdev
*sd
, struct v4l2_edid
*edid
)
1829 struct tda1997x_state
*state
= to_state(sd
);
1831 v4l_dbg(1, debug
, state
->client
, "%s pad=%d\n", __func__
, edid
->pad
);
1832 memset(edid
->reserved
, 0, sizeof(edid
->reserved
));
1834 if (edid
->start_block
== 0 && edid
->blocks
== 0) {
1835 edid
->blocks
= state
->edid
.blocks
;
1839 if (!state
->edid
.present
)
1842 if (edid
->start_block
>= state
->edid
.blocks
)
1845 if (edid
->start_block
+ edid
->blocks
> state
->edid
.blocks
)
1846 edid
->blocks
= state
->edid
.blocks
- edid
->start_block
;
1848 memcpy(edid
->edid
, state
->edid
.edid
+ edid
->start_block
* 128,
1849 edid
->blocks
* 128);
1854 static int tda1997x_set_edid(struct v4l2_subdev
*sd
, struct v4l2_edid
*edid
)
1856 struct tda1997x_state
*state
= to_state(sd
);
1859 v4l_dbg(1, debug
, state
->client
, "%s pad=%d\n", __func__
, edid
->pad
);
1860 memset(edid
->reserved
, 0, sizeof(edid
->reserved
));
1862 if (edid
->start_block
!= 0)
1865 if (edid
->blocks
== 0) {
1866 state
->edid
.blocks
= 0;
1867 state
->edid
.present
= 0;
1868 tda1997x_disable_edid(sd
);
1872 if (edid
->blocks
> 2) {
1877 tda1997x_disable_edid(sd
);
1879 /* write base EDID */
1880 for (i
= 0; i
< 128; i
++)
1881 io_write(sd
, REG_EDID_IN_BYTE0
+ i
, edid
->edid
[i
]);
1883 /* write CEA Extension */
1884 for (i
= 0; i
< 128; i
++)
1885 io_write(sd
, REG_EDID_IN_BYTE128
+ i
, edid
->edid
[i
+128]);
1888 memcpy(state
->edid
.edid
, edid
->edid
, 256);
1889 state
->edid
.blocks
= edid
->blocks
;
1891 tda1997x_enable_edid(sd
);
1896 static int tda1997x_get_dv_timings_cap(struct v4l2_subdev
*sd
,
1897 struct v4l2_dv_timings_cap
*cap
)
1899 *cap
= tda1997x_dv_timings_cap
;
1903 static int tda1997x_enum_dv_timings(struct v4l2_subdev
*sd
,
1904 struct v4l2_enum_dv_timings
*timings
)
1906 return v4l2_enum_dv_timings_cap(timings
, &tda1997x_dv_timings_cap
,
1910 static const struct v4l2_subdev_pad_ops tda1997x_pad_ops
= {
1911 .init_cfg
= tda1997x_init_cfg
,
1912 .enum_mbus_code
= tda1997x_enum_mbus_code
,
1913 .get_fmt
= tda1997x_get_format
,
1914 .set_fmt
= tda1997x_set_format
,
1915 .get_edid
= tda1997x_get_edid
,
1916 .set_edid
= tda1997x_set_edid
,
1917 .dv_timings_cap
= tda1997x_get_dv_timings_cap
,
1918 .enum_dv_timings
= tda1997x_enum_dv_timings
,
1921 /* -----------------------------------------------------------------------------
1922 * v4l2_subdev_core_ops
1925 static int tda1997x_log_infoframe(struct v4l2_subdev
*sd
, int addr
)
1927 struct tda1997x_state
*state
= to_state(sd
);
1928 union hdmi_infoframe frame
;
1933 len
= io_readn(sd
, addr
, sizeof(buffer
), buffer
);
1934 v4l2_dbg(1, debug
, sd
, "infoframe: addr=%d len=%d\n", addr
, len
);
1935 err
= hdmi_infoframe_unpack(&frame
, buffer
, sizeof(buffer
));
1937 v4l_err(state
->client
,
1938 "failed parsing %d byte infoframe: 0x%04x/0x%02x\n",
1939 len
, addr
, buffer
[0]);
1942 hdmi_infoframe_log(KERN_INFO
, &state
->client
->dev
, &frame
);
1947 static int tda1997x_log_status(struct v4l2_subdev
*sd
)
1949 struct tda1997x_state
*state
= to_state(sd
);
1950 struct v4l2_dv_timings timings
;
1951 struct hdmi_avi_infoframe
*avi
= &state
->avi_infoframe
;
1953 v4l2_info(sd
, "-----Chip status-----\n");
1954 v4l2_info(sd
, "Chip: %s N%d\n", state
->info
->name
,
1955 state
->chip_revision
+ 1);
1956 v4l2_info(sd
, "EDID Enabled: %s\n", state
->edid
.present
? "yes" : "no");
1958 v4l2_info(sd
, "-----Signal status-----\n");
1959 v4l2_info(sd
, "Cable detected (+5V power): %s\n",
1960 tda1997x_detect_tx_5v(sd
) ? "yes" : "no");
1961 v4l2_info(sd
, "HPD detected: %s\n",
1962 tda1997x_detect_tx_hpd(sd
) ? "yes" : "no");
1964 v4l2_info(sd
, "-----Video Timings-----\n");
1965 switch (tda1997x_detect_std(state
, &timings
)) {
1967 v4l2_info(sd
, "No video detected\n");
1970 v4l2_info(sd
, "Invalid signal detected\n");
1973 v4l2_print_dv_timings(sd
->name
, "Configured format: ",
1974 &state
->timings
, true);
1976 v4l2_info(sd
, "-----Color space-----\n");
1977 v4l2_info(sd
, "Input color space: %s %s %s",
1978 hdmi_colorspace_names
[avi
->colorspace
],
1979 (avi
->colorspace
== HDMI_COLORSPACE_RGB
) ? "" :
1980 hdmi_colorimetry_names
[avi
->colorimetry
],
1981 v4l2_quantization_names
[state
->colorimetry
.quantization
]);
1982 v4l2_info(sd
, "Output color space: %s",
1983 vidfmt_names
[state
->vid_fmt
]);
1984 v4l2_info(sd
, "Color space conversion: %s", state
->conv
?
1985 state
->conv
->name
: "None");
1987 v4l2_info(sd
, "-----Audio-----\n");
1988 if (state
->audio_channels
) {
1989 v4l2_info(sd
, "audio: %dch %dHz\n", state
->audio_channels
,
1990 state
->audio_samplerate
);
1992 v4l2_info(sd
, "audio: none\n");
1995 v4l2_info(sd
, "-----Infoframes-----\n");
1996 tda1997x_log_infoframe(sd
, AUD_IF
);
1997 tda1997x_log_infoframe(sd
, SPD_IF
);
1998 tda1997x_log_infoframe(sd
, AVI_IF
);
2003 static int tda1997x_subscribe_event(struct v4l2_subdev
*sd
,
2005 struct v4l2_event_subscription
*sub
)
2007 switch (sub
->type
) {
2008 case V4L2_EVENT_SOURCE_CHANGE
:
2009 return v4l2_src_change_event_subdev_subscribe(sd
, fh
, sub
);
2010 case V4L2_EVENT_CTRL
:
2011 return v4l2_ctrl_subdev_subscribe_event(sd
, fh
, sub
);
2017 static const struct v4l2_subdev_core_ops tda1997x_core_ops
= {
2018 .log_status
= tda1997x_log_status
,
2019 .subscribe_event
= tda1997x_subscribe_event
,
2020 .unsubscribe_event
= v4l2_event_subdev_unsubscribe
,
2023 /* -----------------------------------------------------------------------------
2027 static const struct v4l2_subdev_ops tda1997x_subdev_ops
= {
2028 .core
= &tda1997x_core_ops
,
2029 .video
= &tda1997x_video_ops
,
2030 .pad
= &tda1997x_pad_ops
,
2033 /* -----------------------------------------------------------------------------
2037 static int tda1997x_s_ctrl(struct v4l2_ctrl
*ctrl
)
2039 struct v4l2_subdev
*sd
= to_sd(ctrl
);
2040 struct tda1997x_state
*state
= to_state(sd
);
2043 /* allow overriding the default RGB quantization range */
2044 case V4L2_CID_DV_RX_RGB_RANGE
:
2045 state
->rgb_quantization_range
= ctrl
->val
;
2046 set_rgb_quantization_range(state
);
2047 tda1997x_configure_csc(sd
);
2054 static int tda1997x_g_volatile_ctrl(struct v4l2_ctrl
*ctrl
)
2056 struct v4l2_subdev
*sd
= to_sd(ctrl
);
2057 struct tda1997x_state
*state
= to_state(sd
);
2059 if (ctrl
->id
== V4L2_CID_DV_RX_IT_CONTENT_TYPE
) {
2060 ctrl
->val
= state
->avi_infoframe
.content_type
;
2066 static const struct v4l2_ctrl_ops tda1997x_ctrl_ops
= {
2067 .s_ctrl
= tda1997x_s_ctrl
,
2068 .g_volatile_ctrl
= tda1997x_g_volatile_ctrl
,
2071 static int tda1997x_core_init(struct v4l2_subdev
*sd
)
2073 struct tda1997x_state
*state
= to_state(sd
);
2074 struct tda1997x_platform_data
*pdata
= &state
->pdata
;
2079 io_write(sd
, REG_HPD_AUTO_CTRL
, HPD_AUTO_HPD_UNSEL
);
2080 if (state
->chip_revision
== 0) {
2081 io_write(sd
, REG_MAN_SUS_HDMI_SEL
, MAN_DIS_HDCP
| MAN_RST_HDCP
);
2082 io_write(sd
, REG_CGU_DBG_SEL
, 1 << CGU_DBG_CLK_SEL_SHIFT
);
2085 /* reset infoframe at end of start-up-sequencer */
2086 io_write(sd
, REG_SUS_SET_RGB2
, 0x06);
2087 io_write(sd
, REG_SUS_SET_RGB3
, 0x06);
2089 /* Enable TMDS pull-ups */
2090 io_write(sd
, REG_RT_MAN_CTRL
, RT_MAN_CTRL_RT
|
2091 RT_MAN_CTRL_RT_B
| RT_MAN_CTRL_RT_A
);
2093 /* enable sync measurement timing */
2094 tda1997x_cec_write(sd
, REG_PWR_CONTROL
& 0xff, 0x04);
2095 /* adjust CEC clock divider */
2096 tda1997x_cec_write(sd
, REG_OSC_DIVIDER
& 0xff, 0x03);
2097 tda1997x_cec_write(sd
, REG_EN_OSC_PERIOD_LSB
& 0xff, 0xa0);
2098 io_write(sd
, REG_TIMER_D
, 0x54);
2099 /* enable power switch */
2100 reg
= tda1997x_cec_read(sd
, REG_CONTROL
& 0xff);
2102 tda1997x_cec_write(sd
, REG_CONTROL
& 0xff, reg
);
2105 /* read the chip version */
2106 reg
= io_read(sd
, REG_VERSION
);
2107 /* get the chip configuration */
2108 reg
= io_read(sd
, REG_CMTP_REG10
);
2110 /* enable interrupts we care about */
2111 io_write(sd
, REG_INT_MASK_TOP
,
2112 INTERRUPT_HDCP
| INTERRUPT_AUDIO
| INTERRUPT_INFO
|
2113 INTERRUPT_RATE
| INTERRUPT_SUS
);
2114 /* config_mtp,fmt,sus_end,sus_st */
2115 io_write(sd
, REG_INT_MASK_SUS
, MASK_MPT
| MASK_FMT
| MASK_SUS_END
);
2116 /* rate stability change for inputs A/B */
2117 io_write(sd
, REG_INT_MASK_RATE
, MASK_RATE_B_ST
| MASK_RATE_A_ST
);
2119 io_write(sd
, REG_INT_MASK_INFO
,
2120 MASK_AUD_IF
| MASK_SPD_IF
| MASK_AVI_IF
);
2121 /* audio_freq,audio_flg,mute_flg,fifo_err */
2122 io_write(sd
, REG_INT_MASK_AUDIO
,
2123 MASK_AUDIO_FREQ_FLG
| MASK_AUDIO_FLG
| MASK_MUTE_FLG
|
2124 MASK_ERROR_FIFO_PT
);
2125 /* HDCP C5 state reached */
2126 io_write(sd
, REG_INT_MASK_HDCP
, MASK_STATE_C5
);
2127 /* 5V detect and HDP pulse end */
2128 io_write(sd
, REG_INT_MASK_DDC
, MASK_DET_5V
);
2129 /* don't care about AFE/MODE */
2130 io_write(sd
, REG_INT_MASK_AFE
, 0);
2131 io_write(sd
, REG_INT_MASK_MODE
, 0);
2133 /* clear all interrupts */
2134 io_write(sd
, REG_INT_FLG_CLR_TOP
, 0xff);
2135 io_write(sd
, REG_INT_FLG_CLR_SUS
, 0xff);
2136 io_write(sd
, REG_INT_FLG_CLR_DDC
, 0xff);
2137 io_write(sd
, REG_INT_FLG_CLR_RATE
, 0xff);
2138 io_write(sd
, REG_INT_FLG_CLR_MODE
, 0xff);
2139 io_write(sd
, REG_INT_FLG_CLR_INFO
, 0xff);
2140 io_write(sd
, REG_INT_FLG_CLR_AUDIO
, 0xff);
2141 io_write(sd
, REG_INT_FLG_CLR_HDCP
, 0xff);
2142 io_write(sd
, REG_INT_FLG_CLR_AFE
, 0xff);
2144 /* init TMDS equalizer */
2145 if (state
->chip_revision
== 0)
2146 io_write(sd
, REG_CGU_DBG_SEL
, 1 << CGU_DBG_CLK_SEL_SHIFT
);
2147 io_write24(sd
, REG_CLK_MIN_RATE
, CLK_MIN_RATE
);
2148 io_write24(sd
, REG_CLK_MAX_RATE
, CLK_MAX_RATE
);
2149 if (state
->chip_revision
== 0)
2150 io_write(sd
, REG_WDL_CFG
, WDL_CFG_VAL
);
2152 io_write(sd
, REG_DEEP_COLOR_CTRL
, DC_FILTER_VAL
);
2153 /* disable test pattern */
2154 io_write(sd
, REG_SVC_MODE
, 0x00);
2155 /* update HDMI INFO CTRL */
2156 io_write(sd
, REG_INFO_CTRL
, 0xff);
2157 /* write HDMI INFO EXCEED value */
2158 io_write(sd
, REG_INFO_EXCEED
, 3);
2160 if (state
->chip_revision
== 0)
2161 tda1997x_reset_n1(state
);
2164 * No HDCP acknowledge when HDCP is disabled
2165 * and reset SUS to force format detection
2167 tda1997x_hdmi_info_reset(sd
, NACK_HDCP
, true);
2170 tda1997x_manual_hpd(sd
, HPD_LOW_BP
);
2172 /* Configure receiver capabilities */
2173 io_write(sd
, REG_HDCP_BCAPS
, HDCP_HDMI
| HDCP_FAST_REAUTH
);
2175 /* Configure HDMI: Auto HDCP mode, packet controlled mute */
2176 reg
= HDMI_CTRL_MUTE_AUTO
<< HDMI_CTRL_MUTE_SHIFT
;
2177 reg
|= HDMI_CTRL_HDCP_AUTO
<< HDMI_CTRL_HDCP_SHIFT
;
2178 io_write(sd
, REG_HDMI_CTRL
, reg
);
2180 /* reset start-up-sequencer to force format detection */
2181 tda1997x_hdmi_info_reset(sd
, 0, true);
2183 /* disable matrix conversion */
2184 reg
= io_read(sd
, REG_VDP_CTRL
);
2185 reg
|= VDP_CTRL_MATRIX_BP
;
2186 io_write(sd
, REG_VDP_CTRL
, reg
);
2188 /* set video output mode */
2189 tda1997x_configure_vidout(state
);
2191 /* configure video output port */
2192 for (i
= 0; i
< 9; i
++) {
2193 v4l_dbg(1, debug
, state
->client
, "vidout_cfg[%d]=0x%02x\n", i
,
2194 pdata
->vidout_port_cfg
[i
]);
2195 io_write(sd
, REG_VP35_32_CTRL
+ i
, pdata
->vidout_port_cfg
[i
]);
2198 /* configure audio output port */
2199 tda1997x_configure_audout(sd
, 0);
2201 /* configure audio clock freq */
2202 switch (pdata
->audout_mclk_fs
) {
2204 reg
= AUDIO_CLOCK_SEL_512FS
;
2207 reg
= AUDIO_CLOCK_SEL_256FS
;
2210 reg
= AUDIO_CLOCK_SEL_128FS
;
2213 reg
= AUDIO_CLOCK_SEL_64FS
;
2216 reg
= AUDIO_CLOCK_SEL_32FS
;
2219 reg
= AUDIO_CLOCK_SEL_16FS
;
2222 io_write(sd
, REG_AUDIO_CLOCK
, reg
);
2224 /* reset advanced infoframes (ISRC1/ISRC2/ACP) */
2225 tda1997x_hdmi_info_reset(sd
, RESET_AI
, false);
2226 /* reset infoframe */
2227 tda1997x_hdmi_info_reset(sd
, RESET_IF
, false);
2228 /* reset audio infoframes */
2229 tda1997x_hdmi_info_reset(sd
, RESET_AUDIO
, false);
2231 tda1997x_hdmi_info_reset(sd
, RESET_GAMUT
, false);
2233 /* get initial HDMI status */
2234 state
->hdmi_status
= io_read(sd
, REG_HDMI_FLAGS
);
2239 static int tda1997x_set_power(struct tda1997x_state
*state
, bool on
)
2244 ret
= regulator_bulk_enable(TDA1997X_NUM_SUPPLIES
,
2248 ret
= regulator_bulk_disable(TDA1997X_NUM_SUPPLIES
,
2255 static const struct i2c_device_id tda1997x_i2c_id
[] = {
2256 {"tda19971", (kernel_ulong_t
)&tda1997x_chip_info
[TDA19971
]},
2257 {"tda19973", (kernel_ulong_t
)&tda1997x_chip_info
[TDA19973
]},
2260 MODULE_DEVICE_TABLE(i2c
, tda1997x_i2c_id
);
2262 static const struct of_device_id tda1997x_of_id
[] __maybe_unused
= {
2263 { .compatible
= "nxp,tda19971", .data
= &tda1997x_chip_info
[TDA19971
] },
2264 { .compatible
= "nxp,tda19973", .data
= &tda1997x_chip_info
[TDA19973
] },
2267 MODULE_DEVICE_TABLE(of
, tda1997x_of_id
);
2269 static int tda1997x_parse_dt(struct tda1997x_state
*state
)
2271 struct tda1997x_platform_data
*pdata
= &state
->pdata
;
2272 struct v4l2_fwnode_endpoint bus_cfg
= { .bus_type
= 0 };
2273 struct device_node
*ep
;
2274 struct device_node
*np
;
2281 * setup default values:
2282 * - HREF: active high from start to end of row
2283 * - VS: Vertical Sync active high at beginning of frame
2284 * - DE: Active high when data valid
2287 pdata
->vidout_sel_hs
= HS_HREF_SEL_HREF_VHREF
;
2288 pdata
->vidout_sel_vs
= VS_VREF_SEL_VREF_HDMI
;
2289 pdata
->vidout_sel_de
= DE_FREF_SEL_DE_VHREF
;
2291 np
= state
->client
->dev
.of_node
;
2292 ep
= of_graph_get_next_endpoint(np
, NULL
);
2296 ret
= v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep
), &bus_cfg
);
2302 pdata
->vidout_bus_type
= bus_cfg
.bus_type
;
2304 /* polarity of HS/VS/DE */
2305 flags
= bus_cfg
.bus
.parallel
.flags
;
2306 if (flags
& V4L2_MBUS_HSYNC_ACTIVE_LOW
)
2307 pdata
->vidout_inv_hs
= 1;
2308 if (flags
& V4L2_MBUS_VSYNC_ACTIVE_LOW
)
2309 pdata
->vidout_inv_vs
= 1;
2310 if (flags
& V4L2_MBUS_DATA_ACTIVE_LOW
)
2311 pdata
->vidout_inv_de
= 1;
2312 pdata
->vidout_bus_width
= bus_cfg
.bus
.parallel
.bus_width
;
2314 /* video output port config */
2315 ret
= of_property_count_u32_elems(np
, "nxp,vidout-portcfg");
2319 for (i
= 0; i
< ret
/ 2 && i
< 9; i
++) {
2320 of_property_read_u32_index(np
, "nxp,vidout-portcfg",
2322 of_property_read_u32_index(np
, "nxp,vidout-portcfg",
2325 pdata
->vidout_port_cfg
[reg
] = val
;
2328 v4l_err(state
->client
, "nxp,vidout-portcfg missing\n");
2332 /* default to channel layout dictated by packet header */
2333 pdata
->audout_layoutauto
= true;
2335 pdata
->audout_format
= AUDFMT_TYPE_DISABLED
;
2336 if (!of_property_read_string(np
, "nxp,audout-format", &str
)) {
2337 if (strcmp(str
, "i2s") == 0)
2338 pdata
->audout_format
= AUDFMT_TYPE_I2S
;
2339 else if (strcmp(str
, "spdif") == 0)
2340 pdata
->audout_format
= AUDFMT_TYPE_SPDIF
;
2342 v4l_err(state
->client
, "nxp,audout-format invalid\n");
2345 if (!of_property_read_u32(np
, "nxp,audout-layout", &v
)) {
2351 v4l_err(state
->client
,
2352 "nxp,audout-layout invalid\n");
2355 pdata
->audout_layout
= v
;
2357 if (!of_property_read_u32(np
, "nxp,audout-width", &v
)) {
2363 v4l_err(state
->client
,
2364 "nxp,audout-width invalid\n");
2367 pdata
->audout_width
= v
;
2369 if (!of_property_read_u32(np
, "nxp,audout-mclk-fs", &v
)) {
2379 v4l_err(state
->client
,
2380 "nxp,audout-mclk-fs invalid\n");
2383 pdata
->audout_mclk_fs
= v
;
2390 static int tda1997x_get_regulators(struct tda1997x_state
*state
)
2394 for (i
= 0; i
< TDA1997X_NUM_SUPPLIES
; i
++)
2395 state
->supplies
[i
].supply
= tda1997x_supply_name
[i
];
2397 return devm_regulator_bulk_get(&state
->client
->dev
,
2398 TDA1997X_NUM_SUPPLIES
,
2402 static int tda1997x_identify_module(struct tda1997x_state
*state
)
2404 struct v4l2_subdev
*sd
= &state
->sd
;
2405 enum tda1997x_type type
;
2408 /* Read chip configuration*/
2409 reg
= io_read(sd
, REG_CMTP_REG10
);
2410 state
->tmdsb_clk
= (reg
>> 6) & 0x01; /* use tmds clock B_inv for B */
2411 state
->tmdsb_soc
= (reg
>> 5) & 0x01; /* tmds of input B */
2412 state
->port_30bit
= (reg
>> 2) & 0x03; /* 30bit vs 24bit */
2413 state
->output_2p5
= (reg
>> 1) & 0x01; /* output supply 2.5v */
2414 switch ((reg
>> 4) & 0x03) {
2423 dev_err(&state
->client
->dev
, "unsupported chip ID\n");
2426 if (state
->info
->type
!= type
) {
2427 dev_err(&state
->client
->dev
, "chip id mismatch\n");
2431 /* read chip revision */
2432 state
->chip_revision
= io_read(sd
, REG_CMTP_REG11
);
2437 static const struct media_entity_operations tda1997x_media_ops
= {
2438 .link_validate
= v4l2_subdev_link_validate
,
2442 /* -----------------------------------------------------------------------------
2446 /* refine sample-rate based on HDMI source */
2447 static int tda1997x_pcm_startup(struct snd_pcm_substream
*substream
,
2448 struct snd_soc_dai
*dai
)
2450 struct tda1997x_state
*state
= snd_soc_dai_get_drvdata(dai
);
2451 struct snd_soc_component
*component
= dai
->component
;
2452 struct snd_pcm_runtime
*rtd
= substream
->runtime
;
2455 rate
= state
->audio_samplerate
;
2456 err
= snd_pcm_hw_constraint_minmax(rtd
, SNDRV_PCM_HW_PARAM_RATE
,
2459 dev_err(component
->dev
, "failed to constrain samplerate to %dHz\n",
2463 dev_info(component
->dev
, "set samplerate constraint to %dHz\n", rate
);
2468 static const struct snd_soc_dai_ops tda1997x_dai_ops
= {
2469 .startup
= tda1997x_pcm_startup
,
2472 static struct snd_soc_dai_driver tda1997x_audio_dai
= {
2475 .stream_name
= "Capture",
2478 .rates
= SNDRV_PCM_RATE_32000
| SNDRV_PCM_RATE_44100
|
2479 SNDRV_PCM_RATE_48000
| SNDRV_PCM_RATE_88200
|
2480 SNDRV_PCM_RATE_96000
| SNDRV_PCM_RATE_176400
|
2481 SNDRV_PCM_RATE_192000
,
2483 .ops
= &tda1997x_dai_ops
,
2486 static int tda1997x_codec_probe(struct snd_soc_component
*component
)
2491 static void tda1997x_codec_remove(struct snd_soc_component
*component
)
2495 static struct snd_soc_component_driver tda1997x_codec_driver
= {
2496 .probe
= tda1997x_codec_probe
,
2497 .remove
= tda1997x_codec_remove
,
2499 .use_pmdown_time
= 1,
2501 .non_legacy_dai_naming
= 1,
2504 static int tda1997x_probe(struct i2c_client
*client
,
2505 const struct i2c_device_id
*id
)
2507 struct tda1997x_state
*state
;
2508 struct tda1997x_platform_data
*pdata
;
2509 struct v4l2_subdev
*sd
;
2510 struct v4l2_ctrl_handler
*hdl
;
2511 struct v4l2_ctrl
*ctrl
;
2512 static const struct v4l2_dv_timings cea1920x1080
=
2513 V4L2_DV_BT_CEA_1920X1080P60
;
2517 /* Check if the adapter supports the needed features */
2518 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
2521 state
= kzalloc(sizeof(struct tda1997x_state
), GFP_KERNEL
);
2525 state
->client
= client
;
2526 pdata
= &state
->pdata
;
2527 if (IS_ENABLED(CONFIG_OF
) && client
->dev
.of_node
) {
2528 const struct of_device_id
*oid
;
2530 oid
= of_match_node(tda1997x_of_id
, client
->dev
.of_node
);
2531 state
->info
= oid
->data
;
2533 ret
= tda1997x_parse_dt(state
);
2535 v4l_err(client
, "DT parsing error\n");
2536 goto err_free_state
;
2538 } else if (client
->dev
.platform_data
) {
2539 struct tda1997x_platform_data
*pdata
=
2540 client
->dev
.platform_data
;
2542 (const struct tda1997x_chip_info
*)id
->driver_data
;
2543 state
->pdata
= *pdata
;
2545 v4l_err(client
, "No platform data\n");
2547 goto err_free_state
;
2550 ret
= tda1997x_get_regulators(state
);
2552 goto err_free_state
;
2554 ret
= tda1997x_set_power(state
, 1);
2556 goto err_free_state
;
2558 mutex_init(&state
->page_lock
);
2559 mutex_init(&state
->lock
);
2562 INIT_DELAYED_WORK(&state
->delayed_work_enable_hpd
,
2563 tda1997x_delayed_work_enable_hpd
);
2565 /* set video format based on chip and bus width */
2566 ret
= tda1997x_identify_module(state
);
2568 goto err_free_mutex
;
2570 /* initialize subdev */
2572 v4l2_i2c_subdev_init(sd
, client
, &tda1997x_subdev_ops
);
2573 snprintf(sd
->name
, sizeof(sd
->name
), "%s %d-%04x",
2574 id
->name
, i2c_adapter_id(client
->adapter
),
2576 sd
->flags
|= V4L2_SUBDEV_FL_HAS_DEVNODE
| V4L2_SUBDEV_FL_HAS_EVENTS
;
2577 sd
->entity
.function
= MEDIA_ENT_F_DV_DECODER
;
2578 sd
->entity
.ops
= &tda1997x_media_ops
;
2580 /* set allowed mbus modes based on chip, bus-type, and bus-width */
2582 mbus_codes
= state
->mbus_codes
;
2583 switch (state
->info
->type
) {
2585 switch (pdata
->vidout_bus_type
) {
2586 case V4L2_MBUS_PARALLEL
:
2587 switch (pdata
->vidout_bus_width
) {
2589 mbus_codes
[i
++] = MEDIA_BUS_FMT_RGB121212_1X36
;
2590 mbus_codes
[i
++] = MEDIA_BUS_FMT_YUV12_1X36
;
2593 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY12_1X24
;
2597 case V4L2_MBUS_BT656
:
2598 switch (pdata
->vidout_bus_width
) {
2602 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY12_2X12
;
2603 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY10_2X10
;
2604 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY8_2X8
;
2613 switch (pdata
->vidout_bus_type
) {
2614 case V4L2_MBUS_PARALLEL
:
2615 switch (pdata
->vidout_bus_width
) {
2617 mbus_codes
[i
++] = MEDIA_BUS_FMT_RGB888_1X24
;
2618 mbus_codes
[i
++] = MEDIA_BUS_FMT_YUV8_1X24
;
2619 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY12_1X24
;
2622 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY10_1X20
;
2625 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY8_1X16
;
2629 case V4L2_MBUS_BT656
:
2630 switch (pdata
->vidout_bus_width
) {
2635 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY12_2X12
;
2638 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY10_2X10
;
2641 mbus_codes
[i
++] = MEDIA_BUS_FMT_UYVY8_2X8
;
2650 if (WARN_ON(i
> ARRAY_SIZE(state
->mbus_codes
))) {
2652 goto err_free_mutex
;
2655 /* default format */
2656 tda1997x_setup_format(state
, state
->mbus_codes
[0]);
2657 state
->timings
= cea1920x1080
;
2660 * default to SRGB full range quantization
2661 * (in case we don't get an infoframe such as DVI signal
2663 state
->colorimetry
.colorspace
= V4L2_COLORSPACE_SRGB
;
2664 state
->colorimetry
.quantization
= V4L2_QUANTIZATION_FULL_RANGE
;
2666 /* disable/reset HDCP to get correct I2C access to Rx HDMI */
2667 io_write(sd
, REG_MAN_SUS_HDMI_SEL
, MAN_RST_HDCP
| MAN_DIS_HDCP
);
2670 * if N2 version, reset compdel_bp as it may generate some small pixel
2671 * shifts in case of embedded sync/or delay lower than 4
2673 if (state
->chip_revision
!= 0) {
2674 io_write(sd
, REG_MAN_SUS_HDMI_SEL
, 0x00);
2675 io_write(sd
, REG_VDP_CTRL
, 0x1f);
2678 v4l_info(client
, "NXP %s N%d detected\n", state
->info
->name
,
2679 state
->chip_revision
+ 1);
2680 v4l_info(client
, "video: %dbit %s %d formats available\n",
2681 pdata
->vidout_bus_width
,
2682 (pdata
->vidout_bus_type
== V4L2_MBUS_PARALLEL
) ?
2683 "parallel" : "BT656",
2685 if (pdata
->audout_format
) {
2686 v4l_info(client
, "audio: %dch %s layout%d sysclk=%d*fs\n",
2687 pdata
->audout_layout
? 2 : 8,
2688 audfmt_names
[pdata
->audout_format
],
2689 pdata
->audout_layout
,
2690 pdata
->audout_mclk_fs
);
2693 ret
= 0x34 + ((io_read(sd
, REG_SLAVE_ADDR
)>>4) & 0x03);
2694 state
->client_cec
= devm_i2c_new_dummy_device(&client
->dev
,
2695 client
->adapter
, ret
);
2696 if (IS_ERR(state
->client_cec
)) {
2697 ret
= PTR_ERR(state
->client_cec
);
2698 goto err_free_mutex
;
2701 v4l_info(client
, "CEC slave address 0x%02x\n", ret
);
2703 ret
= tda1997x_core_init(sd
);
2705 goto err_free_mutex
;
2707 /* control handlers */
2709 v4l2_ctrl_handler_init(hdl
, 3);
2710 ctrl
= v4l2_ctrl_new_std_menu(hdl
, &tda1997x_ctrl_ops
,
2711 V4L2_CID_DV_RX_IT_CONTENT_TYPE
,
2712 V4L2_DV_IT_CONTENT_TYPE_NO_ITC
, 0,
2713 V4L2_DV_IT_CONTENT_TYPE_NO_ITC
);
2715 ctrl
->flags
|= V4L2_CTRL_FLAG_VOLATILE
;
2716 /* custom controls */
2717 state
->detect_tx_5v_ctrl
= v4l2_ctrl_new_std(hdl
, NULL
,
2718 V4L2_CID_DV_RX_POWER_PRESENT
, 0, 1, 0, 0);
2719 state
->rgb_quantization_range_ctrl
= v4l2_ctrl_new_std_menu(hdl
,
2721 V4L2_CID_DV_RX_RGB_RANGE
, V4L2_DV_RGB_RANGE_FULL
, 0,
2722 V4L2_DV_RGB_RANGE_AUTO
);
2723 state
->sd
.ctrl_handler
= hdl
;
2726 goto err_free_handler
;
2728 v4l2_ctrl_handler_setup(hdl
);
2730 /* initialize source pads */
2731 state
->pads
[TDA1997X_PAD_SOURCE
].flags
= MEDIA_PAD_FL_SOURCE
;
2732 ret
= media_entity_pads_init(&sd
->entity
, TDA1997X_NUM_PADS
,
2735 v4l_err(client
, "failed entity_init: %d", ret
);
2736 goto err_free_handler
;
2739 ret
= v4l2_async_register_subdev(sd
);
2741 goto err_free_media
;
2743 /* register audio DAI */
2744 if (pdata
->audout_format
) {
2747 if (pdata
->audout_width
== 32)
2748 formats
= SNDRV_PCM_FMTBIT_S32_LE
;
2750 formats
= SNDRV_PCM_FMTBIT_S16_LE
;
2751 tda1997x_audio_dai
.capture
.formats
= formats
;
2752 ret
= devm_snd_soc_register_component(&state
->client
->dev
,
2753 &tda1997x_codec_driver
,
2754 &tda1997x_audio_dai
, 1);
2756 dev_err(&client
->dev
, "register audio codec failed\n");
2757 goto err_free_media
;
2759 dev_set_drvdata(&state
->client
->dev
, state
);
2760 v4l_info(state
->client
, "registered audio codec\n");
2764 ret
= devm_request_threaded_irq(&client
->dev
, client
->irq
,
2765 NULL
, tda1997x_isr_thread
,
2766 IRQF_TRIGGER_LOW
| IRQF_ONESHOT
,
2767 KBUILD_MODNAME
, state
);
2769 v4l_err(client
, "irq%d reg failed: %d\n", client
->irq
, ret
);
2770 goto err_free_media
;
2776 media_entity_cleanup(&sd
->entity
);
2778 v4l2_ctrl_handler_free(&state
->hdl
);
2780 cancel_delayed_work(&state
->delayed_work_enable_hpd
);
2781 mutex_destroy(&state
->page_lock
);
2782 mutex_destroy(&state
->lock
);
2785 dev_err(&client
->dev
, "%s failed: %d\n", __func__
, ret
);
2790 static int tda1997x_remove(struct i2c_client
*client
)
2792 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
2793 struct tda1997x_state
*state
= to_state(sd
);
2794 struct tda1997x_platform_data
*pdata
= &state
->pdata
;
2796 if (pdata
->audout_format
) {
2797 mutex_destroy(&state
->audio_lock
);
2800 disable_irq(state
->client
->irq
);
2801 tda1997x_power_mode(state
, 0);
2803 v4l2_async_unregister_subdev(sd
);
2804 media_entity_cleanup(&sd
->entity
);
2805 v4l2_ctrl_handler_free(&state
->hdl
);
2806 regulator_bulk_disable(TDA1997X_NUM_SUPPLIES
, state
->supplies
);
2807 cancel_delayed_work(&state
->delayed_work_enable_hpd
);
2808 mutex_destroy(&state
->page_lock
);
2809 mutex_destroy(&state
->lock
);
2816 static struct i2c_driver tda1997x_i2c_driver
= {
2819 .of_match_table
= of_match_ptr(tda1997x_of_id
),
2821 .probe
= tda1997x_probe
,
2822 .remove
= tda1997x_remove
,
2823 .id_table
= tda1997x_i2c_id
,
2826 module_i2c_driver(tda1997x_i2c_driver
);
2828 MODULE_AUTHOR("Tim Harvey <tharvey@gateworks.com>");
2829 MODULE_DESCRIPTION("TDA1997X HDMI Receiver driver");
2830 MODULE_LICENSE("GPL v2");