summaryrefslogtreecommitdiff
path: root/drivers/media/video/zoran
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2009-03-08 23:04:38 +0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 19:43:21 +0400
commit1cd3c0fa927084549005fc22e54d99684b314f14 (patch)
treeffec4f2829239216640983e0102f4638493a1140 /drivers/media/video/zoran
parent98ec633972a70cf71d71bc8762804f0af4792d08 (diff)
downloadlinux-1cd3c0fa927084549005fc22e54d99684b314f14.tar.xz
V4L/DVB (11022): zoran/bt819: use new notify functionality.
Bt819 needs the parent driver to drive a GPIO pin low and high in order to reset its fifo. Use the new notify callback for this. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/zoran')
-rw-r--r--drivers/media/video/zoran/zoran_card.c20
-rw-r--r--drivers/media/video/zoran/zoran_device.c36
-rw-r--r--drivers/media/video/zoran/zoran_device.h3
-rw-r--r--drivers/media/video/zoran/zoran_driver.c12
4 files changed, 25 insertions, 46 deletions
diff --git a/drivers/media/video/zoran/zoran_card.c b/drivers/media/video/zoran/zoran_card.c
index b5d228d91b06..ec9b6ef56090 100644
--- a/drivers/media/video/zoran/zoran_card.c
+++ b/drivers/media/video/zoran/zoran_card.c
@@ -39,7 +39,6 @@
#include <linux/i2c.h>
#include <linux/i2c-algo-bit.h>
#include <linux/videodev2.h>
-#include <media/v4l2-common.h>
#include <linux/spinlock.h>
#include <linux/sem.h>
#include <linux/kmod.h>
@@ -48,8 +47,9 @@
#include <linux/pci.h>
#include <linux/interrupt.h>
#include <linux/mutex.h>
-
-#include <asm/io.h>
+#include <linux/io.h>
+#include <media/v4l2-common.h>
+#include <media/bt819.h>
#include "videocodec.h"
#include "zoran.h"
@@ -1196,6 +1196,19 @@ zoran_setup_videocodec (struct zoran *zr,
return m;
}
+static int zoran_subdev_notify(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
+{
+ struct zoran *zr = to_zoran(sd->v4l2_dev);
+
+ /* Bt819 needs to reset its FIFO buffer using #FRST pin and
+ LML33 card uses GPIO(7) for that. */
+ if (cmd == BT819_FIFO_RESET_LOW)
+ GPIO(zr, 7, 0);
+ else if (cmd == BT819_FIFO_RESET_HIGH)
+ GPIO(zr, 7, 1);
+ return 0;
+}
+
/*
* Scan for a Buz card (actually for the PCI controller ZR36057),
* request the irq and map the io memory
@@ -1226,6 +1239,7 @@ static int __devinit zoran_probe(struct pci_dev *pdev,
ZORAN_NAME, __func__);
return -ENOMEM;
}
+ zr->v4l2_dev.notify = zoran_subdev_notify;
if (v4l2_device_register(&pdev->dev, &zr->v4l2_dev))
goto zr_free_mem;
zr->pci_dev = pdev;
diff --git a/drivers/media/video/zoran/zoran_device.c b/drivers/media/video/zoran/zoran_device.c
index f8bcd1a248c2..e0223deed35e 100644
--- a/drivers/media/video/zoran/zoran_device.c
+++ b/drivers/media/video/zoran/zoran_device.c
@@ -1584,8 +1584,8 @@ zoran_init_hardware (struct zoran *zr)
route.input = zr->card.input[zr->input].muxsel;
decoder_call(zr, core, init, 0);
- decoder_s_std(zr, zr->norm);
- decoder_s_routing(zr, &route);
+ decoder_call(zr, tuner, s_std, zr->norm);
+ decoder_call(zr, video, s_routing, &route);
encoder_call(zr, core, init, 0);
encoder_call(zr, video, s_std_output, zr->norm);
@@ -1650,35 +1650,3 @@ zr36057_init_vfe (struct zoran *zr)
reg |= ZR36057_VDCR_Triton;
btwrite(reg, ZR36057_VDCR);
}
-
-/*
- * Interface to decoder and encoder chips using i2c bus
- */
-
-int decoder_s_std(struct zoran *zr, v4l2_std_id std)
-{
- int res;
-
- /* Bt819 needs to reset its FIFO buffer using #FRST pin and
- LML33 card uses GPIO(7) for that. */
- if (zr->card.type == LML33)
- GPIO(zr, 7, 0);
- res = decoder_call(zr, tuner, s_std, std);
- if (zr->card.type == LML33)
- GPIO(zr, 7, 1); /* Pull #FRST high. */
- return res;
-}
-
-int decoder_s_routing(struct zoran *zr, struct v4l2_routing *route)
-{
- int res;
-
- /* Bt819 needs to reset its FIFO buffer using #FRST pin and
- LML33 card uses GPIO(7) for that. */
- if (zr->card.type == LML33)
- GPIO(zr, 7, 0);
- res = decoder_call(zr, video, s_routing, route);
- if (zr->card.type == LML33)
- GPIO(zr, 7, 1); /* Pull #FRST high. */
- return res;
-}
diff --git a/drivers/media/video/zoran/zoran_device.h b/drivers/media/video/zoran/zoran_device.h
index 85414e17524e..07f2c23ff740 100644
--- a/drivers/media/video/zoran/zoran_device.h
+++ b/drivers/media/video/zoran/zoran_device.h
@@ -92,7 +92,4 @@ extern int pass_through;
#define encoder_call(zr, o, f, args...) \
v4l2_subdev_call(zr->encoder, o, f, ##args)
-int decoder_s_std(struct zoran *zr, v4l2_std_id std);
-int decoder_s_routing(struct zoran *zr, struct v4l2_routing *route);
-
#endif /* __ZORAN_DEVICE_H__ */
diff --git a/drivers/media/video/zoran/zoran_driver.c b/drivers/media/video/zoran/zoran_driver.c
index 60501f256b28..1e87fb9f7146 100644
--- a/drivers/media/video/zoran/zoran_driver.c
+++ b/drivers/media/video/zoran/zoran_driver.c
@@ -1449,7 +1449,7 @@ zoran_set_norm (struct zoran *zr,
v4l2_std_id std = 0;
decoder_call(zr, video, querystd, &std);
- decoder_s_std(zr, std);
+ decoder_call(zr, tuner, s_std, std);
/* let changes come into effect */
ssleep(2);
@@ -1461,7 +1461,7 @@ zoran_set_norm (struct zoran *zr,
"%s: %s - no norm detected\n",
ZR_DEVNAME(zr), __func__);
/* reset norm */
- decoder_s_std(zr, zr->norm);
+ decoder_call(zr, tuner, s_std, zr->norm);
return -EIO;
}
@@ -1480,7 +1480,7 @@ zoran_set_norm (struct zoran *zr,
if (on)
zr36057_overlay(zr, 0);
- decoder_s_std(zr, norm);
+ decoder_call(zr, tuner, s_std, norm);
encoder_call(zr, video, s_std_output, norm);
if (on)
@@ -1522,7 +1522,7 @@ zoran_set_input (struct zoran *zr,
route.input = zr->card.input[input].muxsel;
zr->input = input;
- decoder_s_routing(zr, &route);
+ decoder_call(zr, video, s_routing, &route);
return 0;
}
@@ -1775,7 +1775,7 @@ jpgreqbuf_unlock_and_return:
goto gstat_unlock_and_return;
}
- decoder_s_routing(zr, &route);
+ decoder_call(zr, video, s_routing, &route);
/* sleep 1 second */
ssleep(1);
@@ -1786,7 +1786,7 @@ jpgreqbuf_unlock_and_return:
/* restore previous input and norm */
route.input = zr->card.input[zr->input].muxsel;
- decoder_s_routing(zr, &route);
+ decoder_call(zr, video, s_routing, &route);
gstat_unlock_and_return:
mutex_unlock(&zr->resource_lock);