aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7134
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2010-06-30 18:07:09 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2010-06-30 18:07:09 -0400
commit08fa16b6b75005c120b59d00ae42a0b7cc68db45 (patch)
treec5f22412467f72dd0c7291bbb958a9485e894f02 /drivers/media/video/saa7134
parent1796b983cc4cbbed5e9e478b03591609a2c21987 (diff)
parent7e27d6e778cd87b6f2415515d7127eba53fe5d02 (diff)
Merge commit 'v2.6.35-rc3' into next
Diffstat (limited to 'drivers/media/video/saa7134')
-rw-r--r--drivers/media/video/saa7134/saa6752hs.c46
-rw-r--r--drivers/media/video/saa7134/saa7134-cards.c55
-rw-r--r--drivers/media/video/saa7134/saa7134-empress.c9
-rw-r--r--drivers/media/video/saa7134/saa7134-input.c18
-rw-r--r--drivers/media/video/saa7134/saa7134.h1
5 files changed, 101 insertions, 28 deletions
diff --git a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c
index 1eabff6b2456..40fd31ca7716 100644
--- a/drivers/media/video/saa7134/saa6752hs.c
+++ b/drivers/media/video/saa7134/saa6752hs.c
@@ -846,24 +846,28 @@ static int saa6752hs_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_control
846 return 0; 846 return 0;
847} 847}
848 848
849static int saa6752hs_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) 849static int saa6752hs_g_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *f)
850{ 850{
851 struct saa6752hs_state *h = to_state(sd); 851 struct saa6752hs_state *h = to_state(sd);
852 852
853 if (h->video_format == SAA6752HS_VF_UNKNOWN) 853 if (h->video_format == SAA6752HS_VF_UNKNOWN)
854 h->video_format = SAA6752HS_VF_D1; 854 h->video_format = SAA6752HS_VF_D1;
855 f->fmt.pix.width = 855 f->width = v4l2_format_table[h->video_format].fmt.pix.width;
856 v4l2_format_table[h->video_format].fmt.pix.width; 856 f->height = v4l2_format_table[h->video_format].fmt.pix.height;
857 f->fmt.pix.height = 857 f->code = V4L2_MBUS_FMT_FIXED;
858 v4l2_format_table[h->video_format].fmt.pix.height; 858 f->field = V4L2_FIELD_INTERLACED;
859 f->colorspace = V4L2_COLORSPACE_SMPTE170M;
859 return 0; 860 return 0;
860} 861}
861 862
862static int saa6752hs_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *f) 863static int saa6752hs_s_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *f)
863{ 864{
864 struct saa6752hs_state *h = to_state(sd); 865 struct saa6752hs_state *h = to_state(sd);
865 int dist_352, dist_480, dist_720; 866 int dist_352, dist_480, dist_720;
866 867
868 if (f->code != V4L2_MBUS_FMT_FIXED)
869 return -EINVAL;
870
867 /* 871 /*
868 FIXME: translate and round width/height into EMPRESS 872 FIXME: translate and round width/height into EMPRESS
869 subsample type: 873 subsample type:
@@ -876,28 +880,30 @@ static int saa6752hs_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *f)
876 D1 | 720x576 | 720x480 880 D1 | 720x576 | 720x480
877 */ 881 */
878 882
879 dist_352 = abs(f->fmt.pix.width - 352); 883 dist_352 = abs(f->width - 352);
880 dist_480 = abs(f->fmt.pix.width - 480); 884 dist_480 = abs(f->width - 480);
881 dist_720 = abs(f->fmt.pix.width - 720); 885 dist_720 = abs(f->width - 720);
882 if (dist_720 < dist_480) { 886 if (dist_720 < dist_480) {
883 f->fmt.pix.width = 720; 887 f->width = 720;
884 f->fmt.pix.height = 576; 888 f->height = 576;
885 h->video_format = SAA6752HS_VF_D1; 889 h->video_format = SAA6752HS_VF_D1;
886 } else if (dist_480 < dist_352) { 890 } else if (dist_480 < dist_352) {
887 f->fmt.pix.width = 480; 891 f->width = 480;
888 f->fmt.pix.height = 576; 892 f->height = 576;
889 h->video_format = SAA6752HS_VF_2_3_D1; 893 h->video_format = SAA6752HS_VF_2_3_D1;
890 } else { 894 } else {
891 f->fmt.pix.width = 352; 895 f->width = 352;
892 if (abs(f->fmt.pix.height - 576) < 896 if (abs(f->height - 576) <
893 abs(f->fmt.pix.height - 288)) { 897 abs(f->height - 288)) {
894 f->fmt.pix.height = 576; 898 f->height = 576;
895 h->video_format = SAA6752HS_VF_1_2_D1; 899 h->video_format = SAA6752HS_VF_1_2_D1;
896 } else { 900 } else {
897 f->fmt.pix.height = 288; 901 f->height = 288;
898 h->video_format = SAA6752HS_VF_SIF; 902 h->video_format = SAA6752HS_VF_SIF;
899 } 903 }
900 } 904 }
905 f->field = V4L2_FIELD_INTERLACED;
906 f->colorspace = V4L2_COLORSPACE_SMPTE170M;
901 return 0; 907 return 0;
902} 908}
903 909
@@ -932,8 +938,8 @@ static const struct v4l2_subdev_core_ops saa6752hs_core_ops = {
932}; 938};
933 939
934static const struct v4l2_subdev_video_ops saa6752hs_video_ops = { 940static const struct v4l2_subdev_video_ops saa6752hs_video_ops = {
935 .s_fmt = saa6752hs_s_fmt, 941 .s_mbus_fmt = saa6752hs_s_mbus_fmt,
936 .g_fmt = saa6752hs_g_fmt, 942 .g_mbus_fmt = saa6752hs_g_mbus_fmt,
937}; 943};
938 944
939static const struct v4l2_subdev_ops saa6752hs_ops = { 945static const struct v4l2_subdev_ops saa6752hs_ops = {
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
index 72700d4e3941..07f6bb8ef9d9 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -3897,6 +3897,40 @@ struct saa7134_board saa7134_boards[] = {
3897 .gpio = 0x01, 3897 .gpio = 0x01,
3898 }, 3898 },
3899 }, 3899 },
3900 [SAA7134_BOARD_AVERMEDIA_M733A] = {
3901 .name = "Avermedia PCI M733A",
3902 .audio_clock = 0x00187de7,
3903 .tuner_type = TUNER_PHILIPS_TDA8290,
3904 .radio_type = UNSET,
3905 .tuner_addr = ADDR_UNSET,
3906 .radio_addr = ADDR_UNSET,
3907 .tuner_config = 0,
3908 .gpiomask = 0x020200000,
3909 .inputs = {{
3910 .name = name_tv,
3911 .vmux = 1,
3912 .amux = TV,
3913 .tv = 1,
3914 }, {
3915 .name = name_comp1,
3916 .vmux = 3,
3917 .amux = LINE1,
3918 }, {
3919 .name = name_svideo,
3920 .vmux = 8,
3921 .amux = LINE1,
3922 } },
3923 .radio = {
3924 .name = name_radio,
3925 .amux = TV,
3926 .gpio = 0x00200000,
3927 },
3928 .mute = {
3929 .name = name_mute,
3930 .amux = TV,
3931 .gpio = 0x01,
3932 },
3933 },
3900 [SAA7134_BOARD_BEHOLD_401] = { 3934 [SAA7134_BOARD_BEHOLD_401] = {
3901 /* Beholder Intl. Ltd. 2008 */ 3935 /* Beholder Intl. Ltd. 2008 */
3902 /*Dmitry Belimov <d.belimov@gmail.com> */ 3936 /*Dmitry Belimov <d.belimov@gmail.com> */
@@ -5822,6 +5856,18 @@ struct pci_device_id saa7134_pci_tbl[] = {
5822 .driver_data = SAA7134_BOARD_AVERMEDIA_M135A, 5856 .driver_data = SAA7134_BOARD_AVERMEDIA_M135A,
5823 }, { 5857 }, {
5824 .vendor = PCI_VENDOR_ID_PHILIPS, 5858 .vendor = PCI_VENDOR_ID_PHILIPS,
5859 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5860 .subvendor = 0x1461, /* Avermedia Technologies Inc */
5861 .subdevice = 0x4155,
5862 .driver_data = SAA7134_BOARD_AVERMEDIA_M733A,
5863 }, {
5864 .vendor = PCI_VENDOR_ID_PHILIPS,
5865 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5866 .subvendor = 0x1461, /* Avermedia Technologies Inc */
5867 .subdevice = 0x4255,
5868 .driver_data = SAA7134_BOARD_AVERMEDIA_M733A,
5869 }, {
5870 .vendor = PCI_VENDOR_ID_PHILIPS,
5825 .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 5871 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
5826 .subvendor = PCI_VENDOR_ID_PHILIPS, 5872 .subvendor = PCI_VENDOR_ID_PHILIPS,
5827 .subdevice = 0x2004, 5873 .subdevice = 0x2004,
@@ -6786,6 +6832,7 @@ static int saa7134_tda8290_callback(struct saa7134_dev *dev,
6786 switch (dev->board) { 6832 switch (dev->board) {
6787 case SAA7134_BOARD_HAUPPAUGE_HVR1150: 6833 case SAA7134_BOARD_HAUPPAUGE_HVR1150:
6788 case SAA7134_BOARD_HAUPPAUGE_HVR1120: 6834 case SAA7134_BOARD_HAUPPAUGE_HVR1120:
6835 case SAA7134_BOARD_AVERMEDIA_M733A:
6789 /* tda8290 + tda18271 */ 6836 /* tda8290 + tda18271 */
6790 ret = saa7134_tda8290_18271_callback(dev, command, arg); 6837 ret = saa7134_tda8290_18271_callback(dev, command, arg);
6791 break; 6838 break;
@@ -7087,6 +7134,14 @@ int saa7134_board_init1(struct saa7134_dev *dev)
7087 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x0000C000, 0x0000C000); 7134 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x0000C000, 0x0000C000);
7088 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0000C000, 0x0000C000); 7135 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0000C000, 0x0000C000);
7089 break; 7136 break;
7137 case SAA7134_BOARD_AVERMEDIA_M733A:
7138 saa7134_set_gpio(dev, 1, 1);
7139 msleep(10);
7140 saa7134_set_gpio(dev, 1, 0);
7141 msleep(10);
7142 saa7134_set_gpio(dev, 1, 1);
7143 dev->has_remote = SAA7134_REMOTE_GPIO;
7144 break;
7090 } 7145 }
7091 return 0; 7146 return 0;
7092} 7147}
diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c
index ea877a50f52d..e763f9fd0133 100644
--- a/drivers/media/video/saa7134/saa7134-empress.c
+++ b/drivers/media/video/saa7134/saa7134-empress.c
@@ -223,9 +223,11 @@ static int empress_g_fmt_vid_cap(struct file *file, void *priv,
223 struct v4l2_format *f) 223 struct v4l2_format *f)
224{ 224{
225 struct saa7134_dev *dev = file->private_data; 225 struct saa7134_dev *dev = file->private_data;
226 struct v4l2_mbus_framefmt mbus_fmt;
226 227
227 saa_call_all(dev, video, g_fmt, f); 228 saa_call_all(dev, video, g_mbus_fmt, &mbus_fmt);
228 229
230 v4l2_fill_pix_format(&f->fmt.pix, &mbus_fmt);
229 f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG; 231 f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG;
230 f->fmt.pix.sizeimage = TS_PACKET_SIZE * dev->ts.nr_packets; 232 f->fmt.pix.sizeimage = TS_PACKET_SIZE * dev->ts.nr_packets;
231 233
@@ -236,8 +238,11 @@ static int empress_s_fmt_vid_cap(struct file *file, void *priv,
236 struct v4l2_format *f) 238 struct v4l2_format *f)
237{ 239{
238 struct saa7134_dev *dev = file->private_data; 240 struct saa7134_dev *dev = file->private_data;
241 struct v4l2_mbus_framefmt mbus_fmt;
239 242
240 saa_call_all(dev, video, s_fmt, f); 243 v4l2_fill_mbus_format(&mbus_fmt, &f->fmt.pix, V4L2_MBUS_FMT_FIXED);
244 saa_call_all(dev, video, s_mbus_fmt, &mbus_fmt);
245 v4l2_fill_pix_format(&f->fmt.pix, &mbus_fmt);
241 246
242 f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG; 247 f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG;
243 f->fmt.pix.sizeimage = TS_PACKET_SIZE * dev->ts.nr_packets; 248 f->fmt.pix.sizeimage = TS_PACKET_SIZE * dev->ts.nr_packets;
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c
index e5565e2fd426..0b336ca6d55b 100644
--- a/drivers/media/video/saa7134/saa7134-input.c
+++ b/drivers/media/video/saa7134/saa7134-input.c
@@ -141,8 +141,8 @@ static int get_key_flydvb_trio(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
141 struct saa7134_dev *dev = ir->c->adapter->algo_data; 141 struct saa7134_dev *dev = ir->c->adapter->algo_data;
142 142
143 if (dev == NULL) { 143 if (dev == NULL) {
144 dprintk("get_key_flydvb_trio: " 144 i2cdprintk("get_key_flydvb_trio: "
145 "gir->c->adapter->algo_data is NULL!\n"); 145 "ir->c->adapter->algo_data is NULL!\n");
146 return -EIO; 146 return -EIO;
147 } 147 }
148 148
@@ -195,8 +195,8 @@ static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, u32 *ir_key,
195 /* <dev> is needed to access GPIO. Used by the saa_readl macro. */ 195 /* <dev> is needed to access GPIO. Used by the saa_readl macro. */
196 struct saa7134_dev *dev = ir->c->adapter->algo_data; 196 struct saa7134_dev *dev = ir->c->adapter->algo_data;
197 if (dev == NULL) { 197 if (dev == NULL) {
198 dprintk("get_key_msi_tvanywhere_plus: " 198 i2cdprintk("get_key_msi_tvanywhere_plus: "
199 "gir->c->adapter->algo_data is NULL!\n"); 199 "ir->c->adapter->algo_data is NULL!\n");
200 return -EIO; 200 return -EIO;
201 } 201 }
202 202
@@ -657,12 +657,19 @@ int saa7134_input_init1(struct saa7134_dev *dev)
657 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); 657 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
658 break; 658 break;
659 case SAA7134_BOARD_AVERMEDIA_M135A: 659 case SAA7134_BOARD_AVERMEDIA_M135A:
660 ir_codes = RC_MAP_AVERMEDIA_M135A_RM_JX; 660 ir_codes = RC_MAP_AVERMEDIA_M135A;
661 mask_keydown = 0x0040000; /* Enable GPIO18 line on both edges */ 661 mask_keydown = 0x0040000; /* Enable GPIO18 line on both edges */
662 mask_keyup = 0x0040000; 662 mask_keyup = 0x0040000;
663 mask_keycode = 0xffff; 663 mask_keycode = 0xffff;
664 raw_decode = 1; 664 raw_decode = 1;
665 break; 665 break;
666 case SAA7134_BOARD_AVERMEDIA_M733A:
667 ir_codes = RC_MAP_AVERMEDIA_M733A_RM_K6;
668 mask_keydown = 0x0040000;
669 mask_keyup = 0x0040000;
670 mask_keycode = 0xffff;
671 raw_decode = 1;
672 break;
666 case SAA7134_BOARD_AVERMEDIA_777: 673 case SAA7134_BOARD_AVERMEDIA_777:
667 case SAA7134_BOARD_AVERMEDIA_A16AR: 674 case SAA7134_BOARD_AVERMEDIA_A16AR:
668 ir_codes = RC_MAP_AVERMEDIA; 675 ir_codes = RC_MAP_AVERMEDIA;
@@ -815,7 +822,6 @@ int saa7134_input_init1(struct saa7134_dev *dev)
815 mask_keyup = 0x020000; 822 mask_keyup = 0x020000;
816 polling = 50; /* ms */ 823 polling = 50; /* ms */
817 break; 824 break;
818 break;
819 } 825 }
820 if (NULL == ir_codes) { 826 if (NULL == ir_codes) {
821 printk("%s: Oops: IR config error [card=%d]\n", 827 printk("%s: Oops: IR config error [card=%d]\n",
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
index 3962534267be..756a1ca8833d 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -303,6 +303,7 @@ struct saa7134_format {
303#define SAA7134_BOARD_HAWELL_HW_404M7 177 303#define SAA7134_BOARD_HAWELL_HW_404M7 177
304#define SAA7134_BOARD_BEHOLD_H7 178 304#define SAA7134_BOARD_BEHOLD_H7 178
305#define SAA7134_BOARD_BEHOLD_A7 179 305#define SAA7134_BOARD_BEHOLD_A7 179
306#define SAA7134_BOARD_AVERMEDIA_M733A 180
306 307
307#define SAA7134_MAXBOARDS 32 308#define SAA7134_MAXBOARDS 32
308#define SAA7134_INPUT_MAX 8 309#define SAA7134_INPUT_MAX 8