Re: No video0, /dev/dvb/adapter0 present
Thanks! That helped get me back on track. MythTV doesn't scan channels correctly (I thought it was related to video0) but importing a channels.conf created using the scan program works. So now I have a working MythTV setup! Cheers, Cliffe. On 15/05/10 23:46, CityK wrote: Cliffe, Your card does not support analogue, hence there will be no /dev/videoN node created. You are most likely attempting to use analogue tv viewing applications (i.e. xawtv v3.9x, tvtime, ...). Use applications for digital tv instead (i.e. kaffiene). If you go back over the How to Obtain, Build and Install V4L-DVB Device Drivers article, you will find links to two other articles http://www.linuxtv.org/wiki/index.php/What_is_V4L_or_DVB%3F http://www.linuxtv.org/wiki/index.php/Device_nodes_and_character_devices which should provide you with fuller details. -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [Patch] Moving v4l1 ioctls from kernel to libv4l1
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Thanks a lot for the review, here is the improved version. diff --git a/lib/libv4l1/libv4l1.c b/lib/libv4l1/libv4l1.c index eae3b43..9ef9980 100644 - --- a/lib/libv4l1/libv4l1.c +++ b/lib/libv4l1/libv4l1.c @@ -61,6 +61,10 @@ #define V4L1_PIX_FMT_TOUCHED0x04 #define V4L1_PIX_SIZE_TOUCHED 0x08 +#ifndef min +#define min( a, b ) ( ((a) (b)) ? (a) : (b) ) +#endif + static pthread_mutex_t v4l1_open_mutex = PTHREAD_MUTEX_INITIALIZER; static struct v4l1_dev_info devices[V4L1_MAX_DEVICES] = { { .fd = -1 }, @@ -130,6 +134,19 @@ static unsigned int pixelformat_to_palette(unsigned int pixelformat) return 0; } +static int count_inputs(int fd) +{ + struct v4l2_input input2; + int i; + for (i = 0;; i++) { + memset(input2, 0, sizeof(input2)); + input2.index = i; + if (0 != SYS_IOCTL(fd, VIDIOC_ENUMINPUT, input2)) + break; + } + return i; +} + static int v4l1_set_format(int index, unsigned int width, unsigned int height, int v4l1_pal, int width_height_may_differ) { @@ -491,16 +508,46 @@ int v4l1_ioctl(int fd, unsigned long int request, ...) switch (request) { case VIDIOCGCAP: { struct video_capability *cap = arg; + + struct v4l2_framebuffer fbuf = { 0, }; + struct v4l2_capability cap2 = { 0, }; - - result = SYS_IOCTL(fd, request, arg); + result = SYS_IOCTL(fd, VIDIOC_QUERYCAP,cap2); + if (result 0) + break; + + if (cap2.capabilities V4L2_CAP_VIDEO_OVERLAY) { + result = SYS_IOCTL(fd, VIDIOC_G_FBUF, fbuf); + if (result 0) { + memset(fbuf, 0, sizeof(fbuf)); + } + result = 0; + } + + memcpy(cap-name, cap2.card, min(sizeof(cap-name),sizeof(cap2.card)) ); + + cap-name[sizeof(cap-name) -1 ] = 0; + + if (cap2.capabilities V4L2_CAP_VIDEO_CAPTURE) + cap-type |= VID_TYPE_CAPTURE; + if (cap2.capabilities V4L2_CAP_TUNER) + cap-type |= VID_TYPE_TUNER; + if (cap2.capabilities V4L2_CAP_VBI_CAPTURE) + cap-type |= VID_TYPE_TELETEXT; + if (cap2.capabilities V4L2_CAP_VIDEO_OVERLAY) + cap-type |= VID_TYPE_OVERLAY; + if (fbuf.capability V4L2_FBUF_CAP_LIST_CLIPPING) + cap-type |= VID_TYPE_CLIPPING; + + cap-channels = count_inputs(fd); - - /* override kernel v4l1 compat min / max size with our own more - -accurate values */ cap-minwidth = devices[index].min_width; cap-minheight = devices[index].min_height; cap-maxwidth = devices[index].max_width; cap-maxheight = devices[index].max_height; + break; + } case VIDIOCSPICT: { Hans de Goede wrote: Hi Huzaifa, First of all many thanks for working on this! Comments inline. On 05/18/2010 01:12 PM, Huzaifa Sidhpurwala wrote: Hi All, I have been working with Hans for moving the v4l1 ioctls from the kernel to libv4l1. It would be best to work on one ioctl at a time. The enclosed patch attempts to implement VIDIOCGCAP in the libv4l1. Note: Hans is working with Bill, asking for permission to re-use the v4l1-compat.c code under the LGPL diff --git a/lib/libv4l1/libv4l1.c b/lib/libv4l1/libv4l1.c index eae3b43..8571651 100644 --- a/lib/libv4l1/libv4l1.c +++ b/lib/libv4l1/libv4l1.c @@ -61,6 +61,10 @@ #define V4L1_PIX_FMT_TOUCHED0x04 #define V4L1_PIX_SIZE_TOUCHED 0x08 +#ifndef min +#define min( a, b ) ( ((a) (b)) ? (a) : (b) ) +#endif + static pthread_mutex_t v4l1_open_mutex = PTHREAD_MUTEX_INITIALIZER; static struct v4l1_dev_info devices[V4L1_MAX_DEVICES] = { { .fd = -1 }, @@ -130,6 +134,45 @@ static unsigned int pixelformat_to_palette(unsigned int pixelformat) return 0; } +static int count_inputs(int fd) +{ +struct v4l2_input input2; +int i; +for (i = 0;; i++) { +memset(input2, 0, sizeof(input2)); +input2.index = i; +if (0 != SYS_IOCTL(fd, VIDIOC_ENUMINPUT,input2)) +break; +} +return i; +} + +static int check_size(int fd,int *maxw,int *maxh) +{ +struct v4l2_fmtdesc desc2; +struct v4l2_format fmt2; + +memset(desc2, 0, sizeof(desc2)); +memset(fmt2, 0, sizeof(fmt2)); + +desc2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +if (0 != SYS_IOCTL(fd, VIDIOC_ENUM_FMT,desc2)) +goto done; + +fmt2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +fmt2.fmt.pix.width = 1; +
Re: [Patch] Moving v4l1 ioctls from kernel to libv4l1
Hi, Looks good. I've committed this to my tree (I did some coding style cleanups and added the permission mails received so far for re-using the kernel code in the LGPL libv4l1), see: http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=80e71ff2881617be317301a30d85a9b7f038aaca Some requests for future patches: 1) please use git send-email for sending patches, including revisions of patches. your mail clients mangles patches (- at the beginning of a line becomes - -, line wraps them too). 2) please run checkpatch.pl from the kernel tree on your patches before sending them, in the v4l-utils dir do: git format-patch HEAD~ Then cd into a directory with extracted linux kernel source and do: scripts/checkpatch.pl path/v4l-utils/0001-patch-name.patch And fix any warnings and errors. Thanks Regards, Hans On 05/19/2010 10:43 AM, Huzaifa Sidhpurwala wrote: -BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Thanks a lot for the review, here is the improved version. diff --git a/lib/libv4l1/libv4l1.c b/lib/libv4l1/libv4l1.c index eae3b43..9ef9980 100644 - --- a/lib/libv4l1/libv4l1.c +++ b/lib/libv4l1/libv4l1.c @@ -61,6 +61,10 @@ #define V4L1_PIX_FMT_TOUCHED0x04 #define V4L1_PIX_SIZE_TOUCHED 0x08 +#ifndef min +#define min( a, b ) ( ((a) (b)) ? (a) : (b) ) +#endif + static pthread_mutex_t v4l1_open_mutex = PTHREAD_MUTEX_INITIALIZER; static struct v4l1_dev_info devices[V4L1_MAX_DEVICES] = { { .fd = -1 }, @@ -130,6 +134,19 @@ static unsigned int pixelformat_to_palette(unsigned int pixelformat) return 0; } +static int count_inputs(int fd) +{ + struct v4l2_input input2; + int i; + for (i = 0;; i++) { + memset(input2, 0, sizeof(input2)); + input2.index = i; + if (0 != SYS_IOCTL(fd, VIDIOC_ENUMINPUT,input2)) + break; + } + return i; +} + static int v4l1_set_format(int index, unsigned int width, unsigned int height, int v4l1_pal, int width_height_may_differ) { @@ -491,16 +508,46 @@ int v4l1_ioctl(int fd, unsigned long int request, ...) switch (request) { case VIDIOCGCAP: { struct video_capability *cap = arg; + + struct v4l2_framebuffer fbuf = { 0, }; + struct v4l2_capability cap2 = { 0, }; - - result = SYS_IOCTL(fd, request, arg); + result = SYS_IOCTL(fd, VIDIOC_QUERYCAP,cap2); + if (result 0) + break; + + if (cap2.capabilities V4L2_CAP_VIDEO_OVERLAY) { + result = SYS_IOCTL(fd, VIDIOC_G_FBUF,fbuf); + if (result 0) { + memset(fbuf, 0, sizeof(fbuf)); + } + result = 0; + } + + memcpy(cap-name, cap2.card, min(sizeof(cap-name),sizeof(cap2.card)) ); + + cap-name[sizeof(cap-name) -1 ] = 0; + + if (cap2.capabilities V4L2_CAP_VIDEO_CAPTURE) + cap-type |= VID_TYPE_CAPTURE; + if (cap2.capabilities V4L2_CAP_TUNER) + cap-type |= VID_TYPE_TUNER; + if (cap2.capabilities V4L2_CAP_VBI_CAPTURE) + cap-type |= VID_TYPE_TELETEXT; + if (cap2.capabilities V4L2_CAP_VIDEO_OVERLAY) + cap-type |= VID_TYPE_OVERLAY; + if (fbuf.capability V4L2_FBUF_CAP_LIST_CLIPPING) + cap-type |= VID_TYPE_CLIPPING; + + cap-channels = count_inputs(fd); - - /* override kernel v4l1 compat min / max size with our own more - -accurate values */ cap-minwidth = devices[index].min_width; cap-minheight = devices[index].min_height; cap-maxwidth = devices[index].max_width; cap-maxheight = devices[index].max_height; + break; + } case VIDIOCSPICT: { Hans de Goede wrote: Hi Huzaifa, First of all many thanks for working on this! Comments inline. On 05/18/2010 01:12 PM, Huzaifa Sidhpurwala wrote: Hi All, I have been working with Hans for moving the v4l1 ioctls from the kernel to libv4l1. It would be best to work on one ioctl at a time. The enclosed patch attempts to implement VIDIOCGCAP in the libv4l1. Note: Hans is working with Bill, asking for permission to re-use the v4l1-compat.c code under the LGPL diff --git a/lib/libv4l1/libv4l1.c b/lib/libv4l1/libv4l1.c index eae3b43..8571651 100644 --- a/lib/libv4l1/libv4l1.c +++ b/lib/libv4l1/libv4l1.c @@ -61,6 +61,10 @@ #define V4L1_PIX_FMT_TOUCHED0x04 #define V4L1_PIX_SIZE_TOUCHED 0x08 +#ifndef min +#define min( a, b ) ( ((a) (b)) ? (a) : (b) ) +#endif + static pthread_mutex_t v4l1_open_mutex = PTHREAD_MUTEX_INITIALIZER; static struct v4l1_dev_info
[PATCH] drivers/media/dvb/dvb-usb/dib0700: fix return values
Propagte correct error values instead of returning -1 which just means -EPERM (Permission denied) While at it, also fix some coding style violations. Signed-off-by: Daniel Mack dan...@caiaq.de Cc: Mauro Carvalho Chehab mche...@infradead.org Cc: Jiri Slaby jsl...@suse.cz Cc: Dmitry Torokhov d...@mail.ru Cc: Devin Heitmueller dheitmuel...@kernellabs.com Cc: linux-media@vger.kernel.org --- drivers/media/dvb/dvb-usb/dib0700_core.c | 47 ++--- 1 files changed, 23 insertions(+), 24 deletions(-) diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c b/drivers/media/dvb/dvb-usb/dib0700_core.c index d5e2c23..c73da6b 100644 --- a/drivers/media/dvb/dvb-usb/dib0700_core.c +++ b/drivers/media/dvb/dvb-usb/dib0700_core.c @@ -111,23 +111,24 @@ int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_ static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets) { -struct dib0700_state *st = d-priv; -u8 b[3]; -int ret; - -if (st-fw_version = 0x10201) { - b[0] = REQUEST_SET_USB_XFER_LEN; - b[1] = (nb_ts_packets 8)0xff; - b[2] = nb_ts_packets 0xff; - - deb_info(set the USB xfer len to %i Ts packet\n, nb_ts_packets); - - ret = dib0700_ctrl_wr(d, b, 3); -} else { - deb_info(this firmware does not allow to change the USB xfer len\n); - ret = -EIO; -} -return ret; + struct dib0700_state *st = d-priv; + u8 b[3]; + int ret; + + if (st-fw_version = 0x10201) { + b[0] = REQUEST_SET_USB_XFER_LEN; + b[1] = (nb_ts_packets 8)0xff; + b[2] = nb_ts_packets 0xff; + + deb_info(set the USB xfer len to %i Ts packet\n, nb_ts_packets); + + ret = dib0700_ctrl_wr(d, b, 3); + } else { + deb_info(this firmware does not allow to change the USB xfer len\n); + ret = -EIO; + } + + return ret; } /* @@ -642,7 +643,7 @@ int dib0700_rc_setup(struct dvb_usb_device *d) i = dib0700_ctrl_wr(d, rc_setup, 3); if (i0) { err(ir protocol setup failed); - return -1; + return i; } if (st-fw_version 0x10200) @@ -652,7 +653,7 @@ int dib0700_rc_setup(struct dvb_usb_device *d) purb = usb_alloc_urb(0, GFP_KERNEL); if (purb == NULL) { err(rc usb alloc urb failed\n); - return -1; + return -ENOMEM; } purb-transfer_buffer = usb_buffer_alloc(d-udev, RC_MSG_SIZE_V1_20, @@ -661,7 +662,7 @@ int dib0700_rc_setup(struct dvb_usb_device *d) if (purb-transfer_buffer == NULL) { err(rc usb_buffer_alloc() failed\n); usb_free_urb(purb); - return -1; + return -ENOMEM; } purb-status = -EINPROGRESS; @@ -670,12 +671,10 @@ int dib0700_rc_setup(struct dvb_usb_device *d) dib0700_rc_urb_completion, d); ret = usb_submit_urb(purb, GFP_ATOMIC); - if (ret != 0) { + if (ret != 0) err(rc submit urb failed\n); - return -1; - } - return 0; + return ret; } static int dib0700_probe(struct usb_interface *intf, -- 1.7.1 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] drivers/media/dvb/dvb-usb/dib0700: fix return values
On Wed, May 19, 2010 at 12:26:12PM +0200, Daniel Mack wrote: Propagte correct error values instead of returning -1 which just means -EPERM (Permission denied) While at it, also fix some coding style violations. Signed-off-by: Daniel Mack dan...@caiaq.de Just minor nits. You decide if it is worth a resend ;) Cc: Mauro Carvalho Chehab mche...@infradead.org Cc: Jiri Slaby jsl...@suse.cz Cc: Dmitry Torokhov d...@mail.ru Cc: Devin Heitmueller dheitmuel...@kernellabs.com Cc: linux-media@vger.kernel.org --- drivers/media/dvb/dvb-usb/dib0700_core.c | 47 ++--- 1 files changed, 23 insertions(+), 24 deletions(-) diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c b/drivers/media/dvb/dvb-usb/dib0700_core.c index d5e2c23..c73da6b 100644 --- a/drivers/media/dvb/dvb-usb/dib0700_core.c +++ b/drivers/media/dvb/dvb-usb/dib0700_core.c @@ -111,23 +111,24 @@ int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_ static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets) { -struct dib0700_state *st = d-priv; -u8 b[3]; -int ret; - -if (st-fw_version = 0x10201) { - b[0] = REQUEST_SET_USB_XFER_LEN; - b[1] = (nb_ts_packets 8)0xff; - b[2] = nb_ts_packets 0xff; - - deb_info(set the USB xfer len to %i Ts packet\n, nb_ts_packets); - - ret = dib0700_ctrl_wr(d, b, 3); -} else { - deb_info(this firmware does not allow to change the USB xfer len\n); - ret = -EIO; -} -return ret; + struct dib0700_state *st = d-priv; + u8 b[3]; + int ret; + + if (st-fw_version = 0x10201) { + b[0] = REQUEST_SET_USB_XFER_LEN; + b[1] = (nb_ts_packets 8)0xff; Spaces around operators? + b[2] = nb_ts_packets 0xff; + + deb_info(set the USB xfer len to %i Ts packet\n, nb_ts_packets); + + ret = dib0700_ctrl_wr(d, b, 3); + } else { + deb_info(this firmware does not allow to change the USB xfer len\n); + ret = -EIO; + } + + return ret; } /* @@ -642,7 +643,7 @@ int dib0700_rc_setup(struct dvb_usb_device *d) i = dib0700_ctrl_wr(d, rc_setup, 3); if (i0) { Spaces around operators? err(ir protocol setup failed); - return -1; + return i; } if (st-fw_version 0x10200) @@ -652,7 +653,7 @@ int dib0700_rc_setup(struct dvb_usb_device *d) purb = usb_alloc_urb(0, GFP_KERNEL); if (purb == NULL) { err(rc usb alloc urb failed\n); - return -1; + return -ENOMEM; } purb-transfer_buffer = usb_buffer_alloc(d-udev, RC_MSG_SIZE_V1_20, @@ -661,7 +662,7 @@ int dib0700_rc_setup(struct dvb_usb_device *d) if (purb-transfer_buffer == NULL) { err(rc usb_buffer_alloc() failed\n); usb_free_urb(purb); - return -1; + return -ENOMEM; } purb-status = -EINPROGRESS; @@ -670,12 +671,10 @@ int dib0700_rc_setup(struct dvb_usb_device *d) dib0700_rc_urb_completion, d); ret = usb_submit_urb(purb, GFP_ATOMIC); - if (ret != 0) { + if (ret != 0) if (ret) err(rc submit urb failed\n); - return -1; - } - return 0; + return ret; } static int dib0700_probe(struct usb_interface *intf, -- 1.7.1 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ -- Pengutronix e.K. | Wolfram Sang| Industrial Linux Solutions | http://www.pengutronix.de/ | signature.asc Description: Digital signature
konicawc webcam driver
I have a problem with usb camera driver. It's konicawc. It was working in previous kernels 2.4 for sure and perhaps in 2.6. Now in the latest kernel it doesn't work. The file is /drivers/media/video/usbvideo/konicawc.c I couldn't find anyone in MAINTAINERS for this driver. The error message is Lost sync on frames the same as here https://lists.linux-foundation.org/pipermail/bugme-new/2004-August/010977.html There is a patch but it seems it's already applied in current source. If it could help.I can try older version to find out when this driver broke. -- Patryk Biela -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] drivers/media/dvb/dvb-usb/dib0700: fix return values
Propagte correct error values instead of returning -1 which just means -EPERM (Permission denied) While at it, also fix some coding style violations. Signed-off-by: Daniel Mack dan...@caiaq.de Cc: Mauro Carvalho Chehab mche...@infradead.org Cc: Jiri Slaby jsl...@suse.cz Cc: Dmitry Torokhov d...@mail.ru Cc: Devin Heitmueller dheitmuel...@kernellabs.com Cc: linux-media@vger.kernel.org --- drivers/media/dvb/dvb-usb/dib0700_core.c | 82 +++-- 1 files changed, 42 insertions(+), 40 deletions(-) diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c b/drivers/media/dvb/dvb-usb/dib0700_core.c index 4f961d2..45aec3a 100644 --- a/drivers/media/dvb/dvb-usb/dib0700_core.c +++ b/drivers/media/dvb/dvb-usb/dib0700_core.c @@ -53,7 +53,7 @@ static int dib0700_ctrl_wr(struct dvb_usb_device *d, u8 *tx, u8 txlen) int status; deb_data( ); - debug_dump(tx,txlen,deb_data); + debug_dump(tx, txlen, deb_data); status = usb_control_msg(d-udev, usb_sndctrlpipe(d-udev,0), tx[0], USB_TYPE_VENDOR | USB_DIR_OUT, 0, 0, tx, txlen, @@ -98,7 +98,7 @@ int dib0700_ctrl_rd(struct dvb_usb_device *d, u8 *tx, u8 txlen, u8 *rx, u8 rxlen deb_info(ep 0 read error (status = %d)\n,status); deb_data( ); - debug_dump(rx,rxlen,deb_data); + debug_dump(rx, rxlen, deb_data); return status; /* length in case of success */ } @@ -106,28 +106,29 @@ int dib0700_ctrl_rd(struct dvb_usb_device *d, u8 *tx, u8 txlen, u8 *rx, u8 rxlen int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_dir, u8 gpio_val) { u8 buf[3] = { REQUEST_SET_GPIO, gpio, ((gpio_dir 0x01) 7) | ((gpio_val 0x01) 6) }; - return dib0700_ctrl_wr(d,buf,3); + return dib0700_ctrl_wr(d, buf, sizeof(buf)); } static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets) { -struct dib0700_state *st = d-priv; -u8 b[3]; -int ret; - -if (st-fw_version = 0x10201) { - b[0] = REQUEST_SET_USB_XFER_LEN; - b[1] = (nb_ts_packets 8)0xff; - b[2] = nb_ts_packets 0xff; - - deb_info(set the USB xfer len to %i Ts packet\n, nb_ts_packets); - - ret = dib0700_ctrl_wr(d, b, 3); -} else { - deb_info(this firmware does not allow to change the USB xfer len\n); - ret = -EIO; -} -return ret; + struct dib0700_state *st = d-priv; + u8 b[3]; + int ret; + + if (st-fw_version = 0x10201) { + b[0] = REQUEST_SET_USB_XFER_LEN; + b[1] = (nb_ts_packets 8) 0xff; + b[2] = nb_ts_packets 0xff; + + deb_info(set the USB xfer len to %i Ts packet\n, nb_ts_packets); + + ret = dib0700_ctrl_wr(d, b, 3); + } else { + deb_info(this firmware does not allow to change the USB xfer len\n); + ret = -EIO; + } + + return ret; } /* @@ -178,7 +179,8 @@ static int dib0700_i2c_xfer_new(struct i2c_adapter *adap, struct i2c_msg *msg, value = ((en_start 7) | (en_stop 6) | (msg[i].len 0x3F)) 8 | i2c_dest; /* I2C ctrl + FE bus; */ - index = ((gen_mode6)0xC0) | ((bus_mode4)0x30); + index = ((gen_mode 6) 0xC0) | + ((bus_mode 4) 0x30); result = usb_control_msg(d-udev, usb_rcvctrlpipe(d-udev, 0), @@ -198,11 +200,12 @@ static int dib0700_i2c_xfer_new(struct i2c_adapter *adap, struct i2c_msg *msg, } else { /* Write request */ buf[0] = REQUEST_NEW_I2C_WRITE; - buf[1] = (msg[i].addr 1); + buf[1] = msg[i].addr 1; buf[2] = (en_start 7) | (en_stop 6) | (msg[i].len 0x3F); /* I2C ctrl + FE bus; */ - buf[3] = ((gen_mode6)0xC0) | ((bus_mode4)0x30); + buf[3] = ((gen_mode 6) 0xC0) | +((bus_mode 4) 0x30); /* The Actual i2c payload */ memcpy(buf[4], msg[i].buf, msg[i].len); @@ -240,7 +243,7 @@ static int dib0700_i2c_xfer_legacy(struct i2c_adapter *adap, for (i = 0; i num; i++) { /* fill in the address */ - buf[1] = (msg[i].addr 1); + buf[1] = msg[i].addr 1; /* fill the buffer */ memcpy(buf[2], msg[i].buf, msg[i].len); @@ -368,7 +371,8 @@ int dib0700_download_firmware(struct usb_device *udev, const struct firmware *fw u8 buf[260]; while ((ret = dvb_usb_get_hexline(fw, hx, pos)) 0) { - deb_fwdata(writing to address 0x%08x (buffer: 0x%02x %02x)\n,hx.addr, hx.len, hx.chk); +
Re: [linux-dvb] new DVB-T initial tuning for fr-nantes
Hi, 2010/5/18 BOUWSMA Barry freebeer.bouw...@gmail.com: On wto (wtorek) 18.maj (maj) 2010, 15:05:00, matpic wrote: Salut! hello As from today (18/05/2010) there is new frequency since analogic signal is stopped and is now only numeric. guard-interval has to be set to AUTO or scan find anything (1/32, 1/16, 1/8 ,1/4 doesn't work) Strange. Maybe a different parameter is wrong? (AUTO for one parameter may cause that other parameters are implicitly set to AUTO as well). I do not have the CSA data at hand, but I understand that presently use is made of single transmitter sites, in a MFN (Multi-Frequency Network) and thus a guard interval of 1/32 should be correct. (I understand though that some filler transmitters may be in planning so that a small SFN may be put in service, but I am not clear as to these details... I must research this.) Ok, I've committed it with 1/32 (for now) :-) #same frequency + offset 16700 for some hardware DVB-T tuner snip answered by hftom. Merci, for reporting this change! barry bouwsma Thanks, Christoph -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 0/10] V4L2 ISP driver patchset for Intel Moorestown Camera Imaging Subsystem
Zhang, Xiaolin wrote: Hi linux-media, Here is the third version of V4L2 ISP driver patchset for Intel Moorestown camera imaging subsystem to address community feedback, especially from Hans. Beginning from this version, I am going to split the whole camera driver into two parts: one is dedicated for v4l2 subdev patchset including 4 different cameras, 1 flash led, 2 VCM lens driver and another one is dedicated for v4l2 ISP patchset including only ISP driver with different logical component. Since it is a complicated one subsystem and after this split, it is more clear without logical dependency and would be a convenient for community review. Please break lines around column 70 to 72. In this set of V4L2 ISP driver patches, I will submit the following 10 patches to add intel atom ISP support to the Linux v4l2 subsystem: 1. control ISP data path setting 2. control ISP functional block setting 3. 3A statistics block setting. 4. JPEG encoder block setting 5. memory interface and register spec. 6. specific sensor interface setting 7. v4l2 ISP driver implementation. 8. isp/sensor data structure declaration. 9. private ioctl information. 10. build system change. Please review them and comments are welcome as always. Please see Documentation/SubmittingPatches, section 15: The canonical patch format, especially the Subject: line part, which says: The subsystem in the email's Subject should identify which area or subsystem of the kernel is being patched. The summary phrase in the email's Subject should concisely describe the patch which that email contains. The summary phrase should not be a filename. Do not use the same summary phrase for every patch in a whole patch series (where a patch series is an ordered sequence of multiple, related patches). Basically your 10 items above should be in the subject line of the 10 patches: Subject: [PATCH 1/10] v4l ISP: control ISP data path setting etc. -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
tm6000 video image
Hi Mauro, I have found what wrong is with video image. You generate video buffer in function tm6000_isoc_copy, but that is not right. I move that in function copy_multiplexed and copy_streams. And that works without this http://www.stefan.ringel.de/pub/tm6000_image_10_05_2010.jpg (The lines with little left shift) . Now, I generate a patch. Stefan Ringel -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: tm6000 video image
Stefan Ringel wrote: Hi Mauro, I have found what wrong is with video image. Great! You generate video buffer in function tm6000_isoc_copy, but that is not right. I move that in function copy_multiplexed and copy_streams. And that works without this http://www.stefan.ringel.de/pub/tm6000_image_10_05_2010.jpg (The lines with little left shift) . Didn't work: 404: Not Found - www.stefan.ringel.de Now, I generate a patch. Ok. It would be great to have this issue finally fixed. Cheers, Mauro -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/7] changed driver for MMAP buffer
From: Asheesh Bhardwaj ashe...@lab1.dmlab --- drivers/media/video/davinci/vpif_display.c | 59 drivers/media/video/davinci/vpif_display.h |1 + 2 files changed, 60 insertions(+), 0 deletions(-) diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c index 4a72610..db9f395 100644 --- a/drivers/media/video/davinci/vpif_display.c +++ b/drivers/media/video/davinci/vpif_display.c @@ -62,18 +62,24 @@ static u32 ch2_numbuffers = 3; static u32 ch3_numbuffers = 3; static u32 ch2_bufsize = 1920 * 1080 * 2; static u32 ch3_bufsize = 720 * 576 * 2; +static u32 cont_bufoffset = 0; +static u32 cont_bufsize = 0; module_param(debug, int, 0644); module_param(ch2_numbuffers, uint, S_IRUGO); module_param(ch3_numbuffers, uint, S_IRUGO); module_param(ch2_bufsize, uint, S_IRUGO); module_param(ch3_bufsize, uint, S_IRUGO); +module_param(cont_bufoffset, bool, S_IRUGO); +module_param(cont_bufsize, uint, S_IRUGO); MODULE_PARM_DESC(debug, Debug level 0-1); MODULE_PARM_DESC(ch2_numbuffers, Channel2 buffer count (default:3)); MODULE_PARM_DESC(ch3_numbuffers, Channel3 buffer count (default:3)); MODULE_PARM_DESC(ch2_bufsize, Channel2 buffer size (default:1920 x 1080 x 2)); MODULE_PARM_DESC(ch3_bufsize, Channel3 buffer size (default:720 x 576 x 2)); +MODULE_PARM_DESC(cont_bufoffset,Display offset(default 0)); +MODULE_PARM_DESC(cont_bufsize,Display buffer size(default 0)); static struct vpif_config_params config_params = { .min_numbuffers = 3, @@ -224,6 +230,23 @@ static int vpif_buffer_setup(struct videobuf_queue *q, unsigned int *count, return 0; *size = config_params.channel_bufsize[ch-channel_id]; + +/*Checking if the buffer size exceeds the available buffer*/ +/*ycmux_mode = 0 means 1 channel mode HD and ycmuxmode = 1 means 2 channels mode SD */ +if (ch-vpifparams.std_info.ycmux_mode == 0) { +if (config_params.video_limit[ch-channel_id]) { + while (*size * *count (config_params.video_limit[0] + + config_params.video_limit[1])) + (*count)--; +} +} +else { + if (config_params.video_limit[ch-channel_id]) { + while (*size * *count config_params.video_limit[ch-channel_id]) + (*count)--; +} +} + if (*count config_params.min_numbuffers) *count = config_params.min_numbuffers; @@ -1434,6 +1457,8 @@ static __init int vpif_probe(struct platform_device *pdev) struct video_device *vfd; struct resource *res; int subdev_count; +unsigned long phys_end_kernel; +size_t size; vpif_dev = pdev-dev; @@ -1496,6 +1521,40 @@ static __init int vpif_probe(struct platform_device *pdev) ch-video_dev = vfd; } +/* Initialising the memory from the input arguments file for contiguous memory buffers and avoid defragmentation */ + +if(cont_bufsize) { + /* attempt to determine the end of Linux kernel memory */ +phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); +phys_end_kernel += cont_bufoffset; +size = cont_bufsize; + + err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + err = -ENOMEM; + goto probe_out; + } + + +/*The resources are divided into two equal memory and when we have HD output we can add them together*/ + for (j = 0; j VPIF_DISPLAY_MAX_DEVICES; j++) { + ch = vpif_obj.dev[j]; + ch-channel_id = j; + config_params.video_limit[ch-channel_id] = 0; /* only enabled if second resource exists */ + if(cont_bufsize) { + config_params.video_limit[ch-channel_id] = size/2; +} +} +} + + for (j = 0; j VPIF_DISPLAY_MAX_DEVICES; j++) { ch = vpif_obj.dev[j]; /* Initialize field of the channel objects */ diff --git a/drivers/media/video/davinci/vpif_display.h b/drivers/media/video/davinci/vpif_display.h index ffa237b..f13cd43 100644 --- a/drivers/media/video/davinci/vpif_display.h +++ b/drivers/media/video/davinci/vpif_display.h @@ -162,6 +162,7 @@ struct vpif_config_params { u32 channel_bufsize[VPIF_DISPLAY_NUM_CHANNELS]; u8 numbuffers[VPIF_DISPLAY_NUM_CHANNELS]; u8 min_numbuffers; +u32 video_limit[VPIF_DISPLAY_NUM_CHANNELS]; }; /* Struct
[PATCH 7/7] Patch MMAP buffer bufsize support upto 1080p resolution on capture driver DM365
From: Asheesh Bhardwaj ashe...@lab1.dmlab --- drivers/media/video/davinci/vpfe_capture.c |9 + 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c index aeee5bb..112184d 100644 --- a/drivers/media/video/davinci/vpfe_capture.c +++ b/drivers/media/video/davinci/vpfe_capture.c @@ -80,12 +80,13 @@ #include ccdc_hw_device.h +#define HD_IMAGE_SIZE (1920 * 1080 * 2) #define PAL_IMAGE_SIZE (720 * 576 * 2) #define SECOND_IMAGE_SIZE_MAX (640 * 480 * 2) static int debug; static u32 numbuffers = 3; -static u32 bufsize = PAL_IMAGE_SIZE + SECOND_IMAGE_SIZE_MAX; +static u32 bufsize = HD_IMAGE_SIZE + SECOND_IMAGE_SIZE_MAX; static int interface; static u32 cont_bufoffset = 0; static u32 cont_bufsize = 0; @@ -109,7 +110,7 @@ module_param(cont_bufsize, uint, S_IRUGO); */ MODULE_PARM_DESC(interface, interface 0-1 (default:0)); MODULE_PARM_DESC(numbuffers, buffer count (default:3)); -MODULE_PARM_DESC(bufsize, buffer size in bytes, (default:1443840 bytes)); +MODULE_PARM_DESC(bufsize, buffer size in bytes, (default:4147200 bytes)); MODULE_PARM_DESC(debug, Debug level 0-1); MODULE_PARM_DESC(cont_bufoffset,Capture buffer offset(default 0)); MODULE_PARM_DESC(cont_bufsize,Capture buffer size(default 0)); @@ -141,8 +142,8 @@ struct ccdc_config { static struct vpfe_config_params config_params = { .min_numbuffers = 3, .numbuffers = 3, - .min_bufsize = 720 * 480 * 2, - .device_bufsize = 720 * 576 * 2, + .min_bufsize = 1280 * 720 * 2, + .device_bufsize = 1920* 1080 * 2, }; /* ccdc device registered */ -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 6/7] DM365 capture MMAP buffer allocation
From: Asheesh Bhardwaj ashe...@lab1.dmlab --- drivers/media/video/davinci/vpfe_capture.c | 39 +--- include/media/davinci/vpfe_capture.h |1 + 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c index 7748ce8..aeee5bb 100644 --- a/drivers/media/video/davinci/vpfe_capture.c +++ b/drivers/media/video/davinci/vpfe_capture.c @@ -87,11 +87,15 @@ static int debug; static u32 numbuffers = 3; static u32 bufsize = PAL_IMAGE_SIZE + SECOND_IMAGE_SIZE_MAX; static int interface; +static u32 cont_bufoffset = 0; +static u32 cont_bufsize = 0; module_param(interface, bool, S_IRUGO); module_param(numbuffers, uint, S_IRUGO); module_param(bufsize, uint, S_IRUGO); module_param(debug, bool, 0644); +module_param(cont_bufoffset, uint, S_IRUGO); +module_param(cont_bufsize, uint, S_IRUGO); /** * VPFE capture can be used for capturing video such as from TVP5146 or TVP7002 @@ -107,6 +111,8 @@ MODULE_PARM_DESC(interface, interface 0-1 (default:0)); MODULE_PARM_DESC(numbuffers, buffer count (default:3)); MODULE_PARM_DESC(bufsize, buffer size in bytes, (default:1443840 bytes)); MODULE_PARM_DESC(debug, Debug level 0-1); +MODULE_PARM_DESC(cont_bufoffset,Capture buffer offset(default 0)); +MODULE_PARM_DESC(cont_bufsize,Capture buffer size(default 0)); MODULE_DESCRIPTION(VPFE Video for Linux Capture Driver); MODULE_LICENSE(GPL); @@ -1828,10 +1834,14 @@ static int vpfe_videobuf_setup(struct videobuf_queue *vq, *size = config_params.device_bufsize; } - if (*count config_params.min_numbuffers) - *count = config_params.min_numbuffers; + if ( config_params.video_limit) { + while (*size * *count config_params.video_limit) + (*count)--; + } - v4l2_dbg(1, debug, vpfe_dev-v4l2_dev, + if (*count config_params.min_numbuffers) + *count = config_params.min_numbuffers; +v4l2_dbg(1, debug, vpfe_dev-v4l2_dev, count=%d, size=%d\n, *count, *size); return 0; } @@ -2608,8 +2618,10 @@ static __init int vpfe_probe(struct platform_device *pdev) struct vpfe_device *vpfe_dev; struct i2c_adapter *i2c_adap; struct video_device *vfd; - int ret = -ENOMEM, i, j; + int ret = -ENOMEM, i, j, err; int num_subdevs = 0; + unsigned long phys_end_kernel; + size_t size; /* Get the pointer to the device object */ vpfe_dev = vpfe_initialize(); @@ -2622,6 +2634,25 @@ static __init int vpfe_probe(struct platform_device *pdev) vpfe_dev-pdev = pdev-dev; +if(cont_bufsize) { +/* attempt to determine the end of Linux kernel memory */ +phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); +size = cont_bufsize; +phys_end_kernel += cont_bufoffset; +err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + ret = -ENOENT; + goto probe_free_dev_mem; + } +config_params.video_limit = size; +} + if (NULL == pdev-dev.platform_data) { v4l2_err(pdev-dev.driver, Unable to get vpfe config\n); ret = -ENOENT; diff --git a/include/media/davinci/vpfe_capture.h b/include/media/davinci/vpfe_capture.h index bd0f13a..785157c 100644 --- a/include/media/davinci/vpfe_capture.h +++ b/include/media/davinci/vpfe_capture.h @@ -228,6 +228,7 @@ struct vpfe_config_params { u8 numbuffers; u32 min_bufsize; u32 device_bufsize; + u32 video_limit; }; #endif /* End of __KERNEL__ */ -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 5/7] DM365 MMAP buffer allocation for display driver
From: Asheesh Bhardwaj ashe...@lab1.dmlab --- drivers/media/video/davinci/davinci_display.c | 79 - include/media/davinci/davinci_display.h |1 + 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/drivers/media/video/davinci/davinci_display.c b/drivers/media/video/davinci/davinci_display.c index 4c4efef..8eb98c4 100644 --- a/drivers/media/video/davinci/davinci_display.c +++ b/drivers/media/video/davinci/davinci_display.c @@ -45,11 +45,15 @@ static u32 video2_numbuffers = 3; static u32 video3_numbuffers = 3; +static u32 cont2_bufoffset = 0; +static u32 cont2_bufsize = 0; +static u32 cont3_bufoffset = 0; +static u32 cont3_bufsize = 0; #define DAVINCI_DISPLAY_HD_BUF_SIZE (1280*720*2) #define DAVINCI_DISPLAY_SD_BUF_SIZE (720*576*2) -static u32 video2_bufsize = DAVINCI_DISPLAY_SD_BUF_SIZE; +static u32 video2_bufsize = DAVINCI_DISPLAY_HD_BUF_SIZE; static u32 video3_bufsize = DAVINCI_DISPLAY_SD_BUF_SIZE; module_param(video2_numbuffers, uint, S_IRUGO); @@ -57,15 +61,24 @@ module_param(video3_numbuffers, uint, S_IRUGO); module_param(video2_bufsize, uint, S_IRUGO); module_param(video3_bufsize, uint, S_IRUGO); +module_param(cont2_bufoffset, uint, S_IRUGO); +module_param(cont2_bufsize, uint, S_IRUGO); +module_param(cont3_bufoffset, uint, S_IRUGO); +module_param(cont3_bufsize, uint, S_IRUGO); + +MODULE_PARM_DESC(cont2_bufoffset,Display offset(default 0)); +MODULE_PARM_DESC(cont2_bufsize,Display buffer size(default 0)); +MODULE_PARM_DESC(cont3_bufoffset,Display offset(default 0)); +MODULE_PARM_DESC(cont3_bufsize,Display buffer size(default 0)); #define DAVINCI_DEFAULT_NUM_BUFS 3 static struct buf_config_params display_buf_config_params = { .min_numbuffers = DAVINCI_DEFAULT_NUM_BUFS, .numbuffers[0] = DAVINCI_DEFAULT_NUM_BUFS, .numbuffers[1] = DAVINCI_DEFAULT_NUM_BUFS, - .min_bufsize[0] = DAVINCI_DISPLAY_SD_BUF_SIZE, + .min_bufsize[0] = DAVINCI_DISPLAY_HD_BUF_SIZE, .min_bufsize[1] = DAVINCI_DISPLAY_SD_BUF_SIZE, - .layer_bufsize[0] = DAVINCI_DISPLAY_SD_BUF_SIZE, + .layer_bufsize[0] = DAVINCI_DISPLAY_HD_BUF_SIZE, .layer_bufsize[1] = DAVINCI_DISPLAY_SD_BUF_SIZE, }; @@ -167,10 +180,17 @@ static int davinci_buffer_setup(struct videobuf_queue *q, unsigned int *count, if (*size buf_size) *size = buf_size; +/*Checking if the buffer size exceeds the available buffer*/ + if (display_buf_config_params.video_limit[layer-device_id]) { + while (*size * *count ( display_buf_config_params.video_limit[layer-device_id])) + (*count)--; +} + /* Store number of buffers allocated in numbuffer member */ if (*count display_buf_config_params.min_numbuffers) *count = layer-numbuffers = display_buf_config_params.numbuffers[layer-device_id]; dev_dbg(davinci_display_dev, /davinci_buffer_setup\n); + return 0; } @@ -1577,6 +1597,8 @@ static __init int davinci_probe(struct device *device) struct video_device *vbd = NULL; struct display_obj *layer = NULL; struct platform_device *pdev; + unsigned long phys_end_kernel; + size_t size; davinci_display_dev = device; @@ -1588,6 +1610,51 @@ static __init int davinci_probe(struct device *device) dev_err(davinci_display_dev, probed for an unknown device\n); return -ENODEV; } + + /* Initialising the memory from the input arguments file for contiguous memory buffers and avoid defragmentation */ + + if(cont2_bufsize) { + /* attempt to determine the end of Linux kernel memory */ + phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); + phys_end_kernel += cont2_bufoffset; + size = cont2_bufsize; + + err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + err = -ENOMEM; + goto probe_out; + display_buf_config_params.video_limit[DAVINCI_DISPLAY_DEVICE_0] = size; + } + } + + if(cont3_bufsize) { + /* attempt to determine the end of Linux kernel memory */ + phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); + phys_end_kernel += cont3_bufoffset; + size = cont3_bufsize; + + err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, +
[PATCH 4/7] Patch for vpif capture driver to get the right size image for the MMAP buffers
From: Asheesh Bhardwaj ashe...@lab1.dmlab --- drivers/media/video/davinci/vpif_capture.c | 13 - 1 files changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/media/video/davinci/vpif_capture.c b/drivers/media/video/davinci/vpif_capture.c index 9ba015d..d18a378 100644 --- a/drivers/media/video/davinci/vpif_capture.c +++ b/drivers/media/video/davinci/vpif_capture.c @@ -142,7 +142,7 @@ static int vpif_buffer_prepare(struct videobuf_queue *q, if (VIDEOBUF_NEEDS_INIT == vb-state) { vb-width = common-width; vb-height = common-height; - vb-size = vb-width * vb-height; + vb-size = common-fmt.fmt.pix.sizeimage; vb-field = field; ret = videobuf_iolock(q, vb, NULL); @@ -469,10 +469,8 @@ static void vpif_calculate_offsets(struct channel_obj *ch) } else vid_ch-buf_field = common-fmt.fmt.pix.field; - if (V4L2_MEMORY_USERPTR == common-memory) - sizeimage = common-fmt.fmt.pix.sizeimage; - else - sizeimage = config_params.channel_bufsize[ch-channel_id]; + /*sizeimage is same for both user and MMAP allocated buffers*/ +sizeimage = common-fmt.fmt.pix.sizeimage; hpitch = common-fmt.fmt.pix.bytesperline; vpitch = sizeimage / (hpitch * 2); @@ -630,10 +628,7 @@ static int vpif_check_format(struct channel_obj *ch, goto exit; } - if (V4L2_MEMORY_USERPTR == common-memory) - sizeimage = pixfmt-sizeimage; - else - sizeimage = config_params.channel_bufsize[ch-channel_id]; + sizeimage = pixfmt-sizeimage; vpitch = sizeimage / (hpitch * 2); -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 3/7] Patch for capture driver MMAP buffer allocation. The user can specify the size of the buffers with an offset from the kernel images
From: Asheesh Bhardwaj ashe...@lab1.dmlab --- drivers/media/video/davinci/vpif_capture.c | 56 +++- drivers/media/video/davinci/vpif_capture.h |2 + 2 files changed, 57 insertions(+), 1 deletions(-) diff --git a/drivers/media/video/davinci/vpif_capture.c b/drivers/media/video/davinci/vpif_capture.c index b4b5905..9ba015d 100644 --- a/drivers/media/video/davinci/vpif_capture.c +++ b/drivers/media/video/davinci/vpif_capture.c @@ -53,18 +53,24 @@ static u32 ch0_numbuffers = 3; static u32 ch1_numbuffers = 3; static u32 ch0_bufsize = 1920 * 1080 * 2; static u32 ch1_bufsize = 720 * 576 * 2; +static u32 cont_bufoffset = 0; +static u32 cont_bufsize = 0; module_param(debug, int, 0644); module_param(ch0_numbuffers, uint, S_IRUGO); module_param(ch1_numbuffers, uint, S_IRUGO); module_param(ch0_bufsize, uint, S_IRUGO); module_param(ch1_bufsize, uint, S_IRUGO); +module_param(cont_bufoffset, uint, S_IRUGO); +module_param(cont_bufsize, uint, S_IRUGO); MODULE_PARM_DESC(debug, Debug level 0-1); MODULE_PARM_DESC(ch2_numbuffers, Channel0 buffer count (default:3)); MODULE_PARM_DESC(ch3_numbuffers, Channel1 buffer count (default:3)); MODULE_PARM_DESC(ch2_bufsize, Channel0 buffer size (default:1920 x 1080 x 2)); MODULE_PARM_DESC(ch3_bufsize, Channel1 buffer size (default:720 x 576 x 2)); +MODULE_PARM_DESC(cont_bufoffset,Capture buffer offset(default 0)); +MODULE_PARM_DESC(cont_bufsize,Capture buffer size(default 0)); static struct vpif_config_params config_params = { .min_numbuffers = 3, @@ -187,10 +193,27 @@ static int vpif_buffer_setup(struct videobuf_queue *q, unsigned int *count, /* Calculate the size of the buffer */ *size = config_params.channel_bufsize[ch-channel_id]; + +/*Checking if the buffer size exceeds the available buffer*/ +/*ycmux_mode = 0 means 1 channel mode HD and ycmuxmode = 1 means 2 channels mode SD */ +if (ch-vpifparams.std_info.ycmux_mode == 0) { +if (config_params.video_limit[ch-channel_id]) { + while (*size * *count (config_params.video_limit[0] + + config_params.video_limit[1])) + (*count)--; +} +} +else { + if (config_params.video_limit[ch-channel_id]) { + while (*size * *count config_params.video_limit[ch-channel_id]) + (*count)--; +} +} if (*count config_params.min_numbuffers) *count = config_params.min_numbuffers; - return 0; + +return 0; } /** @@ -1892,6 +1915,8 @@ static __init int vpif_probe(struct platform_device *pdev) struct video_device *vfd; struct resource *res; int subdev_count; +unsigned long phys_end_kernel; +size_t size; vpif_dev = pdev-dev; @@ -1941,6 +1966,35 @@ static __init int vpif_probe(struct platform_device *pdev) /* Set video_dev to the video device */ ch-video_dev = vfd; } + +/* Initialising the memory from the bootargs for contiguous memory buffers and avoid defragmentation */ +if(cont_bufsize) { +/* attempt to determine the end of Linux kernel memory */ +phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); +size = cont_bufsize; +phys_end_kernel += cont_bufoffset; +err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + err = -ENOMEM; + goto probe_out; + } + +/*The resources are divided into two equal memory and when we have HD output we can add them together*/ + for (j = 0; j VPIF_CAPTURE_MAX_DEVICES; j++) { + ch = vpif_obj.dev[j]; + ch-channel_id = j; + config_params.video_limit[ch-channel_id] = 0; /* only enabled if second resource exists */ + if(cont_bufsize) { + config_params.video_limit[ch-channel_id] = size/2; +} +} +} for (j = 0; j VPIF_CAPTURE_MAX_DEVICES; j++) { ch = vpif_obj.dev[j]; diff --git a/drivers/media/video/davinci/vpif_capture.h b/drivers/media/video/davinci/vpif_capture.h index 4e12ec8..b526887 100644 --- a/drivers/media/video/davinci/vpif_capture.h +++ b/drivers/media/video/davinci/vpif_capture.h @@ -155,6 +155,8 @@ struct vpif_config_params { u32 channel_bufsize[VPIF_CAPTURE_NUM_CHANNELS]; u8 default_device[VPIF_CAPTURE_NUM_CHANNELS]; u8 max_device_type; +/* Used for limiting the video buffers when we
Re: tm6000 video image
Am 19.05.2010 17:49, schrieb Mauro Carvalho Chehab: Stefan Ringel wrote: Hi Mauro, I have found what wrong is with video image. Great! You generate video buffer in function tm6000_isoc_copy, but that is not right. I move that in function copy_multiplexed and copy_streams. And that works without this http://www.stefan.ringel.de/pub/tm6000_image_10_05_2010.jpg (The lines with little left shift) . Didn't work: 404: Not Found - www.stefan.ringel.de Sorry. A point to much. http://www.stefanringel.de/pub/tm6000_image_10_05_2010.jpg Now, I generate a patch. Ok. It would be great to have this issue finally fixed. Cheers, Mauro -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: tm6000 video image
Mauro, I will little rewrite the function copy_streams and copy_packets, I mean fusion these two function to one (copy_streams) and I have tested both of them with shorter code - works. Stefan Ringel Am 19.05.2010 18:12, schrieb Stefan Ringel: Am 19.05.2010 17:49, schrieb Mauro Carvalho Chehab: Stefan Ringel wrote: Hi Mauro, I have found what wrong is with video image. Great! You generate video buffer in function tm6000_isoc_copy, but that is not right. I move that in function copy_multiplexed and copy_streams. And that works without this http://www.stefan.ringel.de/pub/tm6000_image_10_05_2010.jpg (The lines with little left shift) . Didn't work: 404: Not Found - www.stefan.ringel.de Sorry. A point to much. http://www.stefanringel.de/pub/tm6000_image_10_05_2010.jpg Now, I generate a patch. Ok. It would be great to have this issue finally fixed. Cheers, Mauro -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/7] Patch for adding imagesize corrected for MMAP buffers
From: Asheesh Bhardwaj ashee...@ti.com Behave the same as user allocated buffers. The sizeimage parameter is giving the wrong size from the driver and it has to be corrected in S_FMT and TRY_FMT ioctls. --- drivers/media/video/davinci/vpif_display.c | 23 --- 1 files changed, 8 insertions(+), 15 deletions(-) diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c index e10f7c5..a206980 100644 --- a/drivers/media/video/davinci/vpif_display.c +++ b/drivers/media/video/davinci/vpif_display.c @@ -151,7 +151,8 @@ static int vpif_buffer_prepare(struct videobuf_queue *q, if (VIDEOBUF_NEEDS_INIT == vb-state) { vb-width = common-width; vb-height = common-height; - vb-size= vb-width * vb-height; + /* Updating the size based on the application requirement */ +vb-size= common-fmt.fmt.pix.sizeimage; vb-field = field; ret = videobuf_iolock(q, vb, NULL); @@ -440,11 +441,8 @@ static void vpif_calculate_offsets(struct channel_obj *ch) } else { vid_ch-buf_field = common-fmt.fmt.pix.field; } - - if (V4L2_MEMORY_USERPTR == common-memory) - sizeimage = common-fmt.fmt.pix.sizeimage; - else - sizeimage = config_params.channel_bufsize[ch-channel_id]; + +sizeimage = common-fmt.fmt.pix.sizeimage; hpitch = common-fmt.fmt.pix.bytesperline; vpitch = sizeimage / (hpitch * 2); @@ -520,11 +518,9 @@ static int vpif_check_format(struct channel_obj *ch, if (pixfmt-bytesperline = 0) goto invalid_pitch_exit; - - if (V4L2_MEMORY_USERPTR == common-memory) - sizeimage = pixfmt-sizeimage; - else - sizeimage = config_params.channel_bufsize[ch-channel_id]; + +/* sizeimage is same for both MMAP and user allocated buffers, the size is updated for mmap buffers*/ +sizeimage = pixfmt-sizeimage; if (vpif_get_std_info(ch)) { vpif_err(Error getting the standard info\n); @@ -1067,10 +1063,7 @@ static int vpif_streamon(struct file *file, void *priv, goto streamon_exit; } - if (common-memory == V4L2_MEMORY_MMAP) - sizeimage = config_params.channel_bufsize[ch-channel_id]; - else - sizeimage = common-fmt.fmt.pix.sizeimage; + sizeimage = common-fmt.fmt.pix.sizeimage; if ((ch-vpifparams.std_info.width * ch-vpifparams.std_info.height * 2) -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 7/7] Support upto 1080p resolution for MMAP buffers DM365 capture
From: Asheesh Bhardwaj ashee...@ti.com --- drivers/media/video/davinci/vpfe_capture.c |9 + 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c index c6eadba..f7f4041 100644 --- a/drivers/media/video/davinci/vpfe_capture.c +++ b/drivers/media/video/davinci/vpfe_capture.c @@ -80,12 +80,13 @@ #include ccdc_hw_device.h +#define HD_IMAGE_SIZE (1920 * 1080 * 2) #define PAL_IMAGE_SIZE (720 * 576 * 2) #define SECOND_IMAGE_SIZE_MAX (640 * 480 * 2) static int debug; static u32 numbuffers = 3; -static u32 bufsize = PAL_IMAGE_SIZE + SECOND_IMAGE_SIZE_MAX; +static u32 bufsize = HD_IMAGE_SIZE + SECOND_IMAGE_SIZE_MAX; static int interface; static u32 cont_bufoffset = 0; static u32 cont_bufsize = 0; @@ -109,7 +110,7 @@ module_param(cont_bufsize, uint, S_IRUGO); */ MODULE_PARM_DESC(interface, interface 0-1 (default:0)); MODULE_PARM_DESC(numbuffers, buffer count (default:3)); -MODULE_PARM_DESC(bufsize, buffer size in bytes, (default:1443840 bytes)); +MODULE_PARM_DESC(bufsize, buffer size in bytes, (default:4147200 bytes)); MODULE_PARM_DESC(debug, Debug level 0-1); MODULE_PARM_DESC(cont_bufoffset,Capture buffer offset(default 0)); MODULE_PARM_DESC(cont_bufsize,Capture buffer size(default 0)); @@ -141,8 +142,8 @@ struct ccdc_config { static struct vpfe_config_params config_params = { .min_numbuffers = 3, .numbuffers = 3, - .min_bufsize = 720 * 480 * 2, - .device_bufsize = 720 * 576 * 2, + .min_bufsize = 1280 * 720 * 2, + .device_bufsize = 1920* 1080 * 2, }; /* ccdc device registered */ -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 5/7] DM365 MMAP buffer allocation for display driver
From: Asheesh Bhardwaj ashee...@ti.com --- drivers/media/video/davinci/davinci_display.c | 79 - include/media/davinci/davinci_display.h |1 + 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/drivers/media/video/davinci/davinci_display.c b/drivers/media/video/davinci/davinci_display.c index 4c4efef..8eb98c4 100644 --- a/drivers/media/video/davinci/davinci_display.c +++ b/drivers/media/video/davinci/davinci_display.c @@ -45,11 +45,15 @@ static u32 video2_numbuffers = 3; static u32 video3_numbuffers = 3; +static u32 cont2_bufoffset = 0; +static u32 cont2_bufsize = 0; +static u32 cont3_bufoffset = 0; +static u32 cont3_bufsize = 0; #define DAVINCI_DISPLAY_HD_BUF_SIZE (1280*720*2) #define DAVINCI_DISPLAY_SD_BUF_SIZE (720*576*2) -static u32 video2_bufsize = DAVINCI_DISPLAY_SD_BUF_SIZE; +static u32 video2_bufsize = DAVINCI_DISPLAY_HD_BUF_SIZE; static u32 video3_bufsize = DAVINCI_DISPLAY_SD_BUF_SIZE; module_param(video2_numbuffers, uint, S_IRUGO); @@ -57,15 +61,24 @@ module_param(video3_numbuffers, uint, S_IRUGO); module_param(video2_bufsize, uint, S_IRUGO); module_param(video3_bufsize, uint, S_IRUGO); +module_param(cont2_bufoffset, uint, S_IRUGO); +module_param(cont2_bufsize, uint, S_IRUGO); +module_param(cont3_bufoffset, uint, S_IRUGO); +module_param(cont3_bufsize, uint, S_IRUGO); + +MODULE_PARM_DESC(cont2_bufoffset,Display offset(default 0)); +MODULE_PARM_DESC(cont2_bufsize,Display buffer size(default 0)); +MODULE_PARM_DESC(cont3_bufoffset,Display offset(default 0)); +MODULE_PARM_DESC(cont3_bufsize,Display buffer size(default 0)); #define DAVINCI_DEFAULT_NUM_BUFS 3 static struct buf_config_params display_buf_config_params = { .min_numbuffers = DAVINCI_DEFAULT_NUM_BUFS, .numbuffers[0] = DAVINCI_DEFAULT_NUM_BUFS, .numbuffers[1] = DAVINCI_DEFAULT_NUM_BUFS, - .min_bufsize[0] = DAVINCI_DISPLAY_SD_BUF_SIZE, + .min_bufsize[0] = DAVINCI_DISPLAY_HD_BUF_SIZE, .min_bufsize[1] = DAVINCI_DISPLAY_SD_BUF_SIZE, - .layer_bufsize[0] = DAVINCI_DISPLAY_SD_BUF_SIZE, + .layer_bufsize[0] = DAVINCI_DISPLAY_HD_BUF_SIZE, .layer_bufsize[1] = DAVINCI_DISPLAY_SD_BUF_SIZE, }; @@ -167,10 +180,17 @@ static int davinci_buffer_setup(struct videobuf_queue *q, unsigned int *count, if (*size buf_size) *size = buf_size; +/*Checking if the buffer size exceeds the available buffer*/ + if (display_buf_config_params.video_limit[layer-device_id]) { + while (*size * *count ( display_buf_config_params.video_limit[layer-device_id])) + (*count)--; +} + /* Store number of buffers allocated in numbuffer member */ if (*count display_buf_config_params.min_numbuffers) *count = layer-numbuffers = display_buf_config_params.numbuffers[layer-device_id]; dev_dbg(davinci_display_dev, /davinci_buffer_setup\n); + return 0; } @@ -1577,6 +1597,8 @@ static __init int davinci_probe(struct device *device) struct video_device *vbd = NULL; struct display_obj *layer = NULL; struct platform_device *pdev; + unsigned long phys_end_kernel; + size_t size; davinci_display_dev = device; @@ -1588,6 +1610,51 @@ static __init int davinci_probe(struct device *device) dev_err(davinci_display_dev, probed for an unknown device\n); return -ENODEV; } + + /* Initialising the memory from the input arguments file for contiguous memory buffers and avoid defragmentation */ + + if(cont2_bufsize) { + /* attempt to determine the end of Linux kernel memory */ + phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); + phys_end_kernel += cont2_bufoffset; + size = cont2_bufsize; + + err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + err = -ENOMEM; + goto probe_out; + display_buf_config_params.video_limit[DAVINCI_DISPLAY_DEVICE_0] = size; + } + } + + if(cont3_bufsize) { + /* attempt to determine the end of Linux kernel memory */ + phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); + phys_end_kernel += cont3_bufoffset; + size = cont3_bufsize; + + err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, +
[PATCH 6/7] DM365 capture MMAP buffer allocation
From: Asheesh Bhardwaj ashee...@ti.com --- drivers/media/video/davinci/vpfe_capture.c | 39 +--- include/media/davinci/vpfe_capture.h |1 + 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c index b26b9d5..c6eadba 100644 --- a/drivers/media/video/davinci/vpfe_capture.c +++ b/drivers/media/video/davinci/vpfe_capture.c @@ -87,11 +87,15 @@ static int debug; static u32 numbuffers = 3; static u32 bufsize = PAL_IMAGE_SIZE + SECOND_IMAGE_SIZE_MAX; static int interface; +static u32 cont_bufoffset = 0; +static u32 cont_bufsize = 0; module_param(interface, bool, S_IRUGO); module_param(numbuffers, uint, S_IRUGO); module_param(bufsize, uint, S_IRUGO); module_param(debug, bool, 0644); +module_param(cont_bufoffset, uint, S_IRUGO); +module_param(cont_bufsize, uint, S_IRUGO); /** * VPFE capture can be used for capturing video such as from TVP5146 or TVP7002 @@ -107,6 +111,8 @@ MODULE_PARM_DESC(interface, interface 0-1 (default:0)); MODULE_PARM_DESC(numbuffers, buffer count (default:3)); MODULE_PARM_DESC(bufsize, buffer size in bytes, (default:1443840 bytes)); MODULE_PARM_DESC(debug, Debug level 0-1); +MODULE_PARM_DESC(cont_bufoffset,Capture buffer offset(default 0)); +MODULE_PARM_DESC(cont_bufsize,Capture buffer size(default 0)); MODULE_DESCRIPTION(VPFE Video for Linux Capture Driver); MODULE_LICENSE(GPL); @@ -1828,10 +1834,14 @@ static int vpfe_videobuf_setup(struct videobuf_queue *vq, *size = config_params.device_bufsize; } - if (*count config_params.min_numbuffers) - *count = config_params.min_numbuffers; + if ( config_params.video_limit) { + while (*size * *count config_params.video_limit) + (*count)--; + } - v4l2_dbg(1, debug, vpfe_dev-v4l2_dev, + if (*count config_params.min_numbuffers) + *count = config_params.min_numbuffers; +v4l2_dbg(1, debug, vpfe_dev-v4l2_dev, count=%d, size=%d\n, *count, *size); return 0; } @@ -2608,8 +2618,10 @@ static __init int vpfe_probe(struct platform_device *pdev) struct vpfe_device *vpfe_dev; struct i2c_adapter *i2c_adap; struct video_device *vfd; - int ret = -ENOMEM, i, j; + int ret = -ENOMEM, i, j, err; int num_subdevs = 0; + unsigned long phys_end_kernel; + size_t size; /* Get the pointer to the device object */ vpfe_dev = vpfe_initialize(); @@ -2622,6 +2634,25 @@ static __init int vpfe_probe(struct platform_device *pdev) vpfe_dev-pdev = pdev-dev; +if(cont_bufsize) { +/* attempt to determine the end of Linux kernel memory */ +phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); +size = cont_bufsize; +phys_end_kernel += cont_bufoffset; +err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + ret = -ENOENT; + goto probe_free_dev_mem; + } +config_params.video_limit = size; +} + if (NULL == pdev-dev.platform_data) { v4l2_err(pdev-dev.driver, Unable to get vpfe config\n); ret = -ENOENT; diff --git a/include/media/davinci/vpfe_capture.h b/include/media/davinci/vpfe_capture.h index bd0f13a..785157c 100644 --- a/include/media/davinci/vpfe_capture.h +++ b/include/media/davinci/vpfe_capture.h @@ -228,6 +228,7 @@ struct vpfe_config_params { u8 numbuffers; u32 min_bufsize; u32 device_bufsize; + u32 video_limit; }; #endif /* End of __KERNEL__ */ -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 4/7] Change vpif capture driver to get the right size image for the MMAP buffers
From: Asheesh Bhardwaj ashee...@ti.com --- drivers/media/video/davinci/vpif_capture.c | 13 - 1 files changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/media/video/davinci/vpif_capture.c b/drivers/media/video/davinci/vpif_capture.c index 9ba015d..d18a378 100644 --- a/drivers/media/video/davinci/vpif_capture.c +++ b/drivers/media/video/davinci/vpif_capture.c @@ -142,7 +142,7 @@ static int vpif_buffer_prepare(struct videobuf_queue *q, if (VIDEOBUF_NEEDS_INIT == vb-state) { vb-width = common-width; vb-height = common-height; - vb-size = vb-width * vb-height; + vb-size = common-fmt.fmt.pix.sizeimage; vb-field = field; ret = videobuf_iolock(q, vb, NULL); @@ -469,10 +469,8 @@ static void vpif_calculate_offsets(struct channel_obj *ch) } else vid_ch-buf_field = common-fmt.fmt.pix.field; - if (V4L2_MEMORY_USERPTR == common-memory) - sizeimage = common-fmt.fmt.pix.sizeimage; - else - sizeimage = config_params.channel_bufsize[ch-channel_id]; + /*sizeimage is same for both user and MMAP allocated buffers*/ +sizeimage = common-fmt.fmt.pix.sizeimage; hpitch = common-fmt.fmt.pix.bytesperline; vpitch = sizeimage / (hpitch * 2); @@ -630,10 +628,7 @@ static int vpif_check_format(struct channel_obj *ch, goto exit; } - if (V4L2_MEMORY_USERPTR == common-memory) - sizeimage = pixfmt-sizeimage; - else - sizeimage = config_params.channel_bufsize[ch-channel_id]; + sizeimage = pixfmt-sizeimage; vpitch = sizeimage / (hpitch * 2); -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 3/7] Patch for capture driver MMAP buffer allocation.
From: Asheesh Bhardwaj ashee...@ti.com The user can specify the size of the buffers with an offset from the kernel images. --- drivers/media/video/davinci/vpif_capture.c | 56 +++- drivers/media/video/davinci/vpif_capture.h |2 + 2 files changed, 57 insertions(+), 1 deletions(-) diff --git a/drivers/media/video/davinci/vpif_capture.c b/drivers/media/video/davinci/vpif_capture.c index b4b5905..9ba015d 100644 --- a/drivers/media/video/davinci/vpif_capture.c +++ b/drivers/media/video/davinci/vpif_capture.c @@ -53,18 +53,24 @@ static u32 ch0_numbuffers = 3; static u32 ch1_numbuffers = 3; static u32 ch0_bufsize = 1920 * 1080 * 2; static u32 ch1_bufsize = 720 * 576 * 2; +static u32 cont_bufoffset = 0; +static u32 cont_bufsize = 0; module_param(debug, int, 0644); module_param(ch0_numbuffers, uint, S_IRUGO); module_param(ch1_numbuffers, uint, S_IRUGO); module_param(ch0_bufsize, uint, S_IRUGO); module_param(ch1_bufsize, uint, S_IRUGO); +module_param(cont_bufoffset, uint, S_IRUGO); +module_param(cont_bufsize, uint, S_IRUGO); MODULE_PARM_DESC(debug, Debug level 0-1); MODULE_PARM_DESC(ch2_numbuffers, Channel0 buffer count (default:3)); MODULE_PARM_DESC(ch3_numbuffers, Channel1 buffer count (default:3)); MODULE_PARM_DESC(ch2_bufsize, Channel0 buffer size (default:1920 x 1080 x 2)); MODULE_PARM_DESC(ch3_bufsize, Channel1 buffer size (default:720 x 576 x 2)); +MODULE_PARM_DESC(cont_bufoffset,Capture buffer offset(default 0)); +MODULE_PARM_DESC(cont_bufsize,Capture buffer size(default 0)); static struct vpif_config_params config_params = { .min_numbuffers = 3, @@ -187,10 +193,27 @@ static int vpif_buffer_setup(struct videobuf_queue *q, unsigned int *count, /* Calculate the size of the buffer */ *size = config_params.channel_bufsize[ch-channel_id]; + +/*Checking if the buffer size exceeds the available buffer*/ +/*ycmux_mode = 0 means 1 channel mode HD and ycmuxmode = 1 means 2 channels mode SD */ +if (ch-vpifparams.std_info.ycmux_mode == 0) { +if (config_params.video_limit[ch-channel_id]) { + while (*size * *count (config_params.video_limit[0] + + config_params.video_limit[1])) + (*count)--; +} +} +else { + if (config_params.video_limit[ch-channel_id]) { + while (*size * *count config_params.video_limit[ch-channel_id]) + (*count)--; +} +} if (*count config_params.min_numbuffers) *count = config_params.min_numbuffers; - return 0; + +return 0; } /** @@ -1892,6 +1915,8 @@ static __init int vpif_probe(struct platform_device *pdev) struct video_device *vfd; struct resource *res; int subdev_count; +unsigned long phys_end_kernel; +size_t size; vpif_dev = pdev-dev; @@ -1941,6 +1966,35 @@ static __init int vpif_probe(struct platform_device *pdev) /* Set video_dev to the video device */ ch-video_dev = vfd; } + +/* Initialising the memory from the bootargs for contiguous memory buffers and avoid defragmentation */ +if(cont_bufsize) { +/* attempt to determine the end of Linux kernel memory */ +phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); +size = cont_bufsize; +phys_end_kernel += cont_bufoffset; +err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + err = -ENOMEM; + goto probe_out; + } + +/*The resources are divided into two equal memory and when we have HD output we can add them together*/ + for (j = 0; j VPIF_CAPTURE_MAX_DEVICES; j++) { + ch = vpif_obj.dev[j]; + ch-channel_id = j; + config_params.video_limit[ch-channel_id] = 0; /* only enabled if second resource exists */ + if(cont_bufsize) { + config_params.video_limit[ch-channel_id] = size/2; +} +} +} for (j = 0; j VPIF_CAPTURE_MAX_DEVICES; j++) { ch = vpif_obj.dev[j]; diff --git a/drivers/media/video/davinci/vpif_capture.h b/drivers/media/video/davinci/vpif_capture.h index 4e12ec8..b526887 100644 --- a/drivers/media/video/davinci/vpif_capture.h +++ b/drivers/media/video/davinci/vpif_capture.h @@ -155,6 +155,8 @@ struct vpif_config_params { u32 channel_bufsize[VPIF_CAPTURE_NUM_CHANNELS]; u8 default_device[VPIF_CAPTURE_NUM_CHANNELS];
[no subject]
The patches will be applied to the davinci tree the ../drivers/media/video/davinci and will affect the both the capture and display drivers. Apply these patches to the git kernel. From ashee...@ti.com # This line is ignored. GIT: From: ashee...@ti.com Subject: In-Reply-To: -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/7] changed driver for MMAP buffer
From: Asheesh Bhardwaj ashee...@ti.com --- drivers/media/video/davinci/vpif_display.c | 59 drivers/media/video/davinci/vpif_display.h |1 + 2 files changed, 60 insertions(+), 0 deletions(-) diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c index f8d0e72..e10f7c5 100644 --- a/drivers/media/video/davinci/vpif_display.c +++ b/drivers/media/video/davinci/vpif_display.c @@ -62,18 +62,24 @@ static u32 ch2_numbuffers = 3; static u32 ch3_numbuffers = 3; static u32 ch2_bufsize = 1920 * 1080 * 2; static u32 ch3_bufsize = 720 * 576 * 2; +static u32 cont_bufoffset = 0; +static u32 cont_bufsize = 0; module_param(debug, int, 0644); module_param(ch2_numbuffers, uint, S_IRUGO); module_param(ch3_numbuffers, uint, S_IRUGO); module_param(ch2_bufsize, uint, S_IRUGO); module_param(ch3_bufsize, uint, S_IRUGO); +module_param(cont_bufoffset, uint, S_IRUGO); +module_param(cont_bufsize, uint, S_IRUGO); MODULE_PARM_DESC(debug, Debug level 0-1); MODULE_PARM_DESC(ch2_numbuffers, Channel2 buffer count (default:3)); MODULE_PARM_DESC(ch3_numbuffers, Channel3 buffer count (default:3)); MODULE_PARM_DESC(ch2_bufsize, Channel2 buffer size (default:1920 x 1080 x 2)); MODULE_PARM_DESC(ch3_bufsize, Channel3 buffer size (default:720 x 576 x 2)); +MODULE_PARM_DESC(cont_bufoffset,Display offset(default 0)); +MODULE_PARM_DESC(cont_bufsize,Display buffer size(default 0)); static struct vpif_config_params config_params = { .min_numbuffers = 3, @@ -184,6 +190,23 @@ static int vpif_buffer_setup(struct videobuf_queue *q, unsigned int *count, return 0; *size = config_params.channel_bufsize[ch-channel_id]; + +/*Checking if the buffer size exceeds the available buffer*/ +/*ycmux_mode = 0 means 1 channel mode HD and ycmuxmode = 1 means 2 channels mode SD */ +if (ch-vpifparams.std_info.ycmux_mode == 0) { +if (config_params.video_limit[ch-channel_id]) { + while (*size * *count (config_params.video_limit[0] + + config_params.video_limit[1])) + (*count)--; +} +} +else { + if (config_params.video_limit[ch-channel_id]) { + while (*size * *count config_params.video_limit[ch-channel_id]) + (*count)--; +} +} + if (*count config_params.min_numbuffers) *count = config_params.min_numbuffers; @@ -1404,6 +1427,8 @@ static __init int vpif_probe(struct platform_device *pdev) struct video_device *vfd; struct resource *res; int subdev_count; +unsigned long phys_end_kernel; +size_t size; vpif_dev = pdev-dev; @@ -1466,6 +1491,40 @@ static __init int vpif_probe(struct platform_device *pdev) ch-video_dev = vfd; } +/* Initialising the memory from the input arguments file for contiguous memory buffers and avoid defragmentation */ + +if(cont_bufsize) { + /* attempt to determine the end of Linux kernel memory */ +phys_end_kernel = virt_to_phys((void *)PAGE_OFFSET) + + (num_physpages PAGE_SHIFT); +phys_end_kernel += cont_bufoffset; +size = cont_bufsize; + + err = dma_declare_coherent_memory(pdev-dev, phys_end_kernel, + phys_end_kernel, + size, + DMA_MEMORY_MAP | + DMA_MEMORY_EXCLUSIVE); + + if (!err) { + dev_err(pdev-dev, Unable to declare MMAP memory.\n); + err = -ENOMEM; + goto probe_out; + } + + +/*The resources are divided into two equal memory and when we have HD output we can add them together*/ + for (j = 0; j VPIF_DISPLAY_MAX_DEVICES; j++) { + ch = vpif_obj.dev[j]; + ch-channel_id = j; + config_params.video_limit[ch-channel_id] = 0; /* only enabled if second resource exists */ + if(cont_bufsize) { + config_params.video_limit[ch-channel_id] = size/2; +} +} +} + + for (j = 0; j VPIF_DISPLAY_MAX_DEVICES; j++) { ch = vpif_obj.dev[j]; /* Initialize field of the channel objects */ diff --git a/drivers/media/video/davinci/vpif_display.h b/drivers/media/video/davinci/vpif_display.h index ffa237b..fdef83d 100644 --- a/drivers/media/video/davinci/vpif_display.h +++ b/drivers/media/video/davinci/vpif_display.h @@ -162,6 +162,7 @@ struct vpif_config_params { u32 channel_bufsize[VPIF_DISPLAY_NUM_CHANNELS]; u8 numbuffers[VPIF_DISPLAY_NUM_CHANNELS]; u8 min_numbuffers; + u32 video_limit[VPIF_DISPLAY_NUM_CHANNELS]; }; /* Struct which
[PATCH 1/4] tm6000: bugfix incorrect size
From: Stefan Ringel stefan.rin...@arcor.de Signed-off-by: Stefan Ringel stefan.rin...@arcor.de --- drivers/staging/tm6000/tm6000-video.c |6 +- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 9554472..e5f8b57 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -205,7 +205,11 @@ static int copy_packet(struct urb *urb, u32 header, u8 **ptr, u8 *endp, c = (header 24) 0xff; /* split the header fields */ - size = (((header 0x7e) 1) -1) *4; + size = ((header 0x7e) 1); + + if (size 0) + size -= 4; + block = (header 7) 0xf; field = (header 11) 0x1; line = (header 12) 0x1ff; -- 1.7.0.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 3/4] tm6000: bugfix video image
From: Stefan Ringel stefan.rin...@arcor.de bugfix image interference, what sometimes lines in a left shift has. Signed-off-by: Stefan Ringel stefan.rin...@arcor.de --- drivers/staging/tm6000/tm6000-video.c | 82 + 1 files changed, 42 insertions(+), 40 deletions(-) diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index f1acd79..4d92a12 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -339,14 +339,23 @@ static int copy_packet(struct urb *urb, u32 header, u8 **ptr, u8 *endp, return rc; } -static int copy_streams(u8 *data, u8 *out_p, unsigned long len, - struct urb *urb, struct tm6000_buffer **buf) +static int copy_streams(u8 *data, unsigned long len, + struct urb *urb) { struct tm6000_dmaqueue *dma_q = urb-context; struct tm6000_core *dev= container_of(dma_q,struct tm6000_core,vidq); u8 *ptr=data, *endp=data+len; unsigned long header=0; int rc=0; + struct tm6000_buffer *buf; + char *outp = NULL; + + get_next_buf(dma_q, buf); + if (buf) + outp = videobuf_to_vmalloc(buf-vb); + + if (!outp) + return 0; for (ptr=data; ptrendp;) { if (!dev-isoc_ctl.cmd) { @@ -394,7 +403,7 @@ static int copy_streams(u8 *data, u8 *out_p, unsigned long len, } HEADER: /* Copy or continue last copy */ - rc=copy_packet(urb,header,ptr,endp,out_p,buf); + rc=copy_packet(urb,header,ptr,endp,outp,buf); if (rc0) { buf=NULL; printk(KERN_ERR tm6000: buffer underrun at %ld\n, @@ -410,30 +419,39 @@ HEADER: /* * Identify the tm5600/6000 buffer header type and properly handles */ -static int copy_multiplexed(u8 *ptr, u8 *out_p, unsigned long len, - struct urb *urb, struct tm6000_buffer **buf) +static int copy_multiplexed(u8 *ptr, unsigned long len, + struct urb *urb) { struct tm6000_dmaqueue *dma_q = urb-context; struct tm6000_core *dev= container_of(dma_q,struct tm6000_core,vidq); unsigned int pos=dev-isoc_ctl.pos,cpysize; int rc=1; + struct tm6000_buffer *buf; + char *outp = NULL; + + get_next_buf(dma_q, buf); + if (buf) + outp = videobuf_to_vmalloc(buf-vb); + + if (!outp) + return 0; while (len0) { - cpysize=min(len,(*buf)-vb.size-pos); -//printk(Copying %d bytes (max=%lu) from %p to %p[%u]\n,cpysize,(*buf)-vb.size,ptr,out_p,pos); + cpysize=min(len,buf-vb.size-pos); + //printk(Copying %d bytes (max=%lu) from %p to %p[%u]\n,cpysize,(*buf)-vb.size,ptr,out_p,pos); memcpy(out_p[pos], ptr, cpysize); pos+=cpysize; ptr+=cpysize; len-=cpysize; - if (pos = (*buf)-vb.size) { + if (pos = buf-vb.size) { pos=0; /* Announces that a new buffer were filled */ - buffer_filled (dev, dma_q, *buf); + buffer_filled (dev, dma_q, buf); dprintk(dev, V4L2_DEBUG_ISOC, new buffer filled\n); - get_next_buf (dma_q, buf); - if (!*buf) + get_next_buf (dma_q, buf); + if (!buf) break; - out_p = videobuf_to_vmalloc(((*buf)-vb)); + out_p = videobuf_to_vmalloc((buf-vb)); if (!out_p) return rc; pos = 0; @@ -493,52 +511,36 @@ static inline int tm6000_isoc_copy(struct urb *urb) struct tm6000_dmaqueue *dma_q = urb-context; struct tm6000_core *dev= container_of(dma_q,struct tm6000_core,vidq); struct tm6000_buffer *buf; - int i, len=0, rc=1; - int size; - char *outp = NULL, *p; - unsigned long copied; + int i, len=0, rc=1, status; + char *p; - get_next_buf(dma_q, buf); - if (buf) - outp = videobuf_to_vmalloc(buf-vb); - - if (!outp) - return 0; - - size = buf-vb.size; - - copied=0; - - if (urb-status0) { - print_err_status (dev,-1,urb-status); + if (urb-status 0) { + print_err_status (dev, -1, urb-status); return 0; } for (i = 0; i urb-number_of_packets; i++) { - int status = urb-iso_frame_desc[i].status; + status = urb-iso_frame_desc[i].status; if (status0) { print_err_status (dev,i,status); continue; } -
[PATCH 4/4] tm6000: bugfix stabilizing urb data
From: Stefan Ringel stefan.rin...@arcor.de Signed-off-by: Stefan Ringel stefan.rin...@arcor.de --- drivers/staging/tm6000/tm6000-video.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 4d92a12..2a61cc3 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -48,7 +48,7 @@ #define TM6000_MIN_BUF 4 #define TM6000_DEF_BUF 8 -#define TM6000_MAX_ISO_PACKETS 40 /* Max number of ISO packets */ +#define TM6000_MAX_ISO_PACKETS 46 /* Max number of ISO packets */ /* Declare static vars that will be used as parameters */ static unsigned int vid_limit = 16;/* Video memory limit, in Mb */ @@ -620,7 +620,7 @@ static void tm6000_uninit_isoc(struct tm6000_core *dev) static int tm6000_prepare_isoc(struct tm6000_core *dev, unsigned int framesize) { struct tm6000_dmaqueue *dma_q = dev-vidq; - int i, j, sb_size, pipe, size, max_packets, num_bufs = 5; + int i, j, sb_size, pipe, size, max_packets, num_bufs = 8; struct urb *urb; /* De-allocates all pending stuff */ -- 1.7.0.3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: tm6000 video image
Stefan Ringel wrote: Mauro, I will little rewrite the function copy_streams and copy_packets, I mean fusion these two function to one (copy_streams) and I have tested both of them with shorter code - works. Go ahead. Stefan Ringel Am 19.05.2010 18:12, schrieb Stefan Ringel: Am 19.05.2010 17:49, schrieb Mauro Carvalho Chehab: Stefan Ringel wrote: Hi Mauro, I have found what wrong is with video image. Great! You generate video buffer in function tm6000_isoc_copy, but that is not right. I move that in function copy_multiplexed and copy_streams. And that works without this http://www.stefan.ringel.de/pub/tm6000_image_10_05_2010.jpg (The lines with little left shift) . Didn't work: 404: Not Found - www.stefan.ringel.de Sorry. A point to much. http://www.stefanringel.de/pub/tm6000_image_10_05_2010.jpg Now, I generate a patch. Ok. It would be great to have this issue finally fixed. Cheers, Mauro -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- Cheers, Mauro -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[cron job] v4l-dvb daily build 2.6.22 and up: ERRORS, 2.6.16-2.6.21: ERRORS
This message is generated daily by a cron job that builds v4l-dvb for the kernels and architectures in the list below. Results of the daily build of v4l-dvb: date:Wed May 19 19:00:13 CEST 2010 path:http://www.linuxtv.org/hg/v4l-dvb changeset: 14868:f7cc49163f9b git master: f6760aa024199cfbce564311dc4bc4d47b6fb349 git media-master: 4fcfa8824391ef0f9cff82122067f31c6d920921 gcc version: i686-linux-gcc (GCC) 4.4.3 host hardware:x86_64 host os: 2.6.32.5 linux-2.6.32.6-armv5: OK linux-2.6.33-armv5: OK linux-2.6.34-rc7-armv5: ERRORS linux-2.6.32.6-armv5-davinci: WARNINGS linux-2.6.33-armv5-davinci: WARNINGS linux-2.6.34-rc7-armv5-davinci: ERRORS linux-2.6.32.6-armv5-ixp: WARNINGS linux-2.6.33-armv5-ixp: WARNINGS linux-2.6.34-rc7-armv5-ixp: ERRORS linux-2.6.32.6-armv5-omap2: WARNINGS linux-2.6.33-armv5-omap2: WARNINGS linux-2.6.34-rc7-armv5-omap2: ERRORS linux-2.6.22.19-i686: ERRORS linux-2.6.23.17-i686: ERRORS linux-2.6.24.7-i686: ERRORS linux-2.6.25.20-i686: WARNINGS linux-2.6.26.8-i686: WARNINGS linux-2.6.27.44-i686: WARNINGS linux-2.6.28.10-i686: WARNINGS linux-2.6.29.1-i686: WARNINGS linux-2.6.30.10-i686: WARNINGS linux-2.6.31.12-i686: WARNINGS linux-2.6.32.6-i686: WARNINGS linux-2.6.33-i686: WARNINGS linux-2.6.34-rc7-i686: ERRORS linux-2.6.32.6-m32r: OK linux-2.6.33-m32r: OK linux-2.6.34-rc7-m32r: ERRORS linux-2.6.32.6-mips: WARNINGS linux-2.6.33-mips: WARNINGS linux-2.6.34-rc7-mips: ERRORS linux-2.6.32.6-powerpc64: WARNINGS linux-2.6.33-powerpc64: WARNINGS linux-2.6.34-rc7-powerpc64: ERRORS linux-2.6.22.19-x86_64: ERRORS linux-2.6.23.17-x86_64: ERRORS linux-2.6.24.7-x86_64: ERRORS linux-2.6.25.20-x86_64: WARNINGS linux-2.6.26.8-x86_64: WARNINGS linux-2.6.27.44-x86_64: WARNINGS linux-2.6.28.10-x86_64: WARNINGS linux-2.6.29.1-x86_64: WARNINGS linux-2.6.30.10-x86_64: WARNINGS linux-2.6.31.12-x86_64: WARNINGS linux-2.6.32.6-x86_64: WARNINGS linux-2.6.33-x86_64: WARNINGS linux-2.6.34-rc7-x86_64: ERRORS linux-git-armv5: WARNINGS linux-git-armv5-davinci: WARNINGS linux-git-armv5-ixp: WARNINGS linux-git-armv5-omap2: WARNINGS linux-git-i686: WARNINGS linux-git-m32r: OK linux-git-mips: OK linux-git-powerpc64: OK linux-git-x86_64: WARNINGS spec: ERRORS spec-git: OK sparse: ERRORS linux-2.6.16.62-i686: ERRORS linux-2.6.17.14-i686: ERRORS linux-2.6.18.8-i686: ERRORS linux-2.6.19.7-i686: ERRORS linux-2.6.20.21-i686: ERRORS linux-2.6.21.7-i686: ERRORS linux-2.6.16.62-x86_64: ERRORS linux-2.6.17.14-x86_64: ERRORS linux-2.6.18.8-x86_64: ERRORS linux-2.6.19.7-x86_64: ERRORS linux-2.6.20.21-x86_64: ERRORS linux-2.6.21.7-x86_64: ERRORS Detailed results are available here: http://www.xs4all.nl/~hverkuil/logs/Wednesday.log Full logs are available here: http://www.xs4all.nl/~hverkuil/logs/Wednesday.tar.bz2 The V4L-DVB specification from this daily build is here: http://www.xs4all.nl/~hverkuil/spec/media.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 16/37] drivers/media/video/uvc: Use kmemdup
Hi Julia, Thanks for the patch. On Saturday 15 May 2010 23:17:59 Julia Lawall wrote: From: Julia Lawall ju...@diku.dk Use kmemdup when some other buffer is immediately copied into the allocated region. A simplified version of the semantic patch that makes this change is as follows: (http://coccinelle.lip6.fr/) // smpl @@ expression from,to,size,flag; statement S; @@ - to = \(kmalloc\|kzalloc\)(size,flag); + to = kmemdup(from,size,flag); if (to==NULL || ...) S - memcpy(to, from, size); // /smpl Signed-off-by: Julia Lawall ju...@diku.dk --- drivers/media/video/uvc/uvc_driver.c |5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff -u -p a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c --- a/drivers/media/video/uvc/uvc_driver.c +++ b/drivers/media/video/uvc/uvc_driver.c @@ -637,14 +637,13 @@ static int uvc_parse_streaming(struct uv } streaming-header.bControlSize = n; - streaming-header.bmaControls = kmalloc(p*n, GFP_KERNEL); + streaming-header.bmaControls = kmemdup(buffer[size], p * n, I'm puzzled, how did the above semantic patch transform 'p*n' into 'p * n' ? As a side note, keeping 'p*n' would have allowed the statement to fit in one line :-) + GFP_KERNEL); if (streaming-header.bmaControls == NULL) { ret = -ENOMEM; goto error; } - memcpy(streaming-header.bmaControls, buffer[size], p*n); - buflen -= buffer[0]; buffer += buffer[0]; -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [linux-dvb] Leadtek DVT1000S W/ Phillips saa7134
Hi Nathan, Am Freitag, den 21.05.2010, 04:48 +1000 schrieb Nathan Metcalf: Hey Guys, I hope this is the correct place, I am trying to get a LEADTEK DVT1000S HD Tuner card working in Ubuntu (Latest) When I load the saa7134_dvb kernel module, there are no errors, but /dev/dvb is not created. I have tried enabling the debug=1 option when loading the module, but don't get any more useful information. Can someone please assist me? Or direct me to the correct place? Regards, Nathan Metcalf there was some buglet previously, but the card is else supported since Nov. 01 2009 on mercurial v4l-dvb and later kernels. http://linuxtv.org/hg/v4l-dvb/rev/855ee0444e61b8dfe98f495026c4e75c461ce9dd Support for the remote was also added. Cheers, Hermann -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [linux-dvb] Leadtek DVT1000S W/ Phillips saa7134
Thanks Hermann, Does this mean I need to apply that patch you linked to me? Then recompile the module and re-insert? Regards, Nathan On 20/05/10 09:28, hermann pitton wrote: Hi Nathan, Am Freitag, den 21.05.2010, 04:48 +1000 schrieb Nathan Metcalf: Hey Guys, I hope this is the correct place, I am trying to get a LEADTEK DVT1000S HD Tuner card working in Ubuntu (Latest) When I load the saa7134_dvb kernel module, there are no errors, but /dev/dvb is not created. I have tried enabling the debug=1 option when loading the module, but don't get any more useful information. Can someone please assist me? Or direct me to the correct place? Regards, Nathan Metcalf there was some buglet previously, but the card is else supported since Nov. 01 2009 on mercurial v4l-dvb and later kernels. http://linuxtv.org/hg/v4l-dvb/rev/855ee0444e61b8dfe98f495026c4e75c461ce9dd Support for the remote was also added. Cheers, Hermann ___ linux-dvb users mailing list For V4L/DVB development, please use instead linux-media@vger.kernel.org linux-...@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb -- This message was scanned by ESVA and is believed to be clean. To report this message as spam - click the link below http://mailscan.starnewsgroup.com.au/cgi-bin/learn-msg.cgi?id=EC83EC8003.3A3A3 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
full TS in Linux: known issue or new one?
hello All, the issue in question is that in case full TS is captured immediately after lock ( without some delay ) then garbage data ( that don't belong to the TS ) are introduced in the stream. initially Michael Repplinger noticed the problem and told me about it. also, he made test script ( 'run_szap-s2_adapter0_record_dvbsnoop.sh' ) for reproducing the problem easily ( you can find it in the attachment, i made some very small changed to it compared to the original script). so, basically, the test script 'szap-s2' to first transponder in your 'channel.conf' file, use 'dvbsnoop' to dump the full TS from that transponder to a file for 30 seconds, then 'szap-s2' to second transponder in your 'channel.conf' file, use 'dvbsnoop' again to dump the full TS to another file for 30 seconds and repeats this in endless loop. if there is no delay ( 'sleep 0' ) or delay is less than 5 seconds ( at least on my setup those are delays i measured ) between executing 'szap-s2' and 'dvbsnoop' then captured stream contains some additional data that don't belong there, i.e. garbage and you can confirmed it with any TS analyzer tool or just use the attached 'test_file_with_dvbsnoop.sh' that Michael Repplinger prepared. i've already tested about 10 DVB devices from different manufacturers using completely different chips and PCI or PCIe interface and even USB interface, just for completeness here is what i've already tested: - Philips/NXP SAA7146 bridge driver - B2C2 Flexcop IIb PCI bridge driver (put in full TS mode with 'options b2c2_flexcop_pci enable_pid_filtering=0') - Booktree bt8xx bridge driver - Conexant cx88 bridge driver - Conexant cx23885 bridge driver - all USB DVB devices i have (all of them use Cypress USB controller) and with all of the above i can reproduce the problem using 'run_szap-s2_adapter0_record_dvbsnoop.sh' script. however, it seems SAA7146 is somehow better than the others, because sometimes it works good, i.e. captures correct data even without any delay between executing 'szap-s2' and 'dvbsnoop'. so, any ideas, please, either for what could be the root cause for the problem or for acceptable workaround? it seems to me at least at the moment it's a general problem with Linux DVB, but maybe it's known issue and someone knows more about it. many thanks, konstantin test_file_with_dvbsnoop.sh Description: Bourne shell script run_szap-s2_adapter0_record_dvbsnoop.sh Description: Bourne shell script
[PATCH] input: fix error at the default input_get_keycode call
[ 76.376140] BUG: unable to handle kernel NULL pointer dereference at (null) [ 76.376670] IP: [c138b6d0] input_default_getkeycode_from_index+0x40/0x60 [ 76.376670] *pde = [ 76.376670] Oops: 0002 [#1] SMP [ 76.376670] last sysfs file: /sys/devices/virtual/block/dm-5/range [ 76.376670] Modules linked in: ip6t_REJECT nf_conntrack_ipv6 ip6table_filter ip6_tables ipv6 dm_mirror dm_region_hash dm_log uinput snd_intel8x0 snd_ac97_codec ac97_bus snd_seq snd_seq_device snd_pcm snd_timer snd ppdev sg parport_pc soundcore k8temp snd_page_alloc forcedeth pcspkr hwmon parport i2c_nforce2 sd_mod crc_t10dif sr_mod cdrom pata_acpi ata_generic pata_amd sata_nv floppy nouveau ttm drm_kms_helper drm i2c_algo_bit i2c_core dm_mod [last unloaded: scsi_wait_scan] [ 76.376670] [ 76.376670] Pid: 6183, comm: getkeycodes Not tainted 2.6.34 #11 C51MCP51/ [ 76.376670] EIP: 0060:[c138b6d0] EFLAGS: 00210046 CPU: 0 [ 76.376670] EIP is at input_default_getkeycode_from_index+0x40/0x60 [ 76.376670] EAX: EBX: ECX: 0002 EDX: f53ebdc8 [ 76.376670] ESI: f53ebdc8 EDI: f5daf794 EBP: f53ebdb8 ESP: f53ebdb4 [ 76.376670] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 76.376670] Process getkeycodes (pid: 6183, ti=f53ea000 task=f53bd060 task.ti=f53ea000) [ 76.376670] Stack: [ 76.376670] f5daf000 f53ebdec c138d233 f53ebe30 00200286 0004 [ 76.376670] 0 f53ebe2c f5da0340 c16c12cc f53ebdf8 c12f4148 [ 76.376670] 0 c12f4130 f53ebe24 c138d9f8 0002 0001 c138d980 c12f4130 [ 76.376670] Call Trace: [ 76.376670] [c138d233] ? input_get_keycode+0x73/0x90 input_default_getkeycode_from_index() returns the scancode at kt_entry.scancode pointer. Fill it with the scancode address at the function call. Thanks-to: Vladis Kletnieks valdis.kletni...@vt.edu for pointing the issue Cc: Dmitry Torokhov dmitry.torok...@gmail.com Signed-off-by: Mauro Carvalho Chehab mche...@redhat.com diff --git a/drivers/input/input.c b/drivers/input/input.c index 3b63fad..7851d8e 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -838,6 +838,7 @@ int input_get_keycode(struct input_dev *dev, memset(kt_entry, 0, sizeof(kt_entry)); kt_entry.len = 4; kt_entry.index = scancode; + kt_entry.scancode = scancode; spin_lock_irqsave(dev-event_lock, flags); retval = dev-getkeycodebig_from_index(dev, kt_entry); -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] input: fix error at the default input_get_keycode call
Mauro Carvalho Chehab wrote: [ 76.376140] BUG: unable to handle kernel NULL pointer dereference at (null) [ 76.376670] IP: [c138b6d0] input_default_getkeycode_from_index+0x40/0x60 [ 76.376670] *pde = [ 76.376670] Oops: 0002 [#1] SMP [ 76.376670] last sysfs file: /sys/devices/virtual/block/dm-5/range [ 76.376670] Modules linked in: ip6t_REJECT nf_conntrack_ipv6 ip6table_filter ip6_tables ipv6 dm_mirror dm_region_hash dm_log uinput snd_intel8x0 snd_ac97_codec ac97_bus snd_seq snd_seq_device snd_pcm snd_timer snd ppdev sg parport_pc soundcore k8temp snd_page_alloc forcedeth pcspkr hwmon parport i2c_nforce2 sd_mod crc_t10dif sr_mod cdrom pata_acpi ata_generic pata_amd sata_nv floppy nouveau ttm drm_kms_helper drm i2c_algo_bit i2c_core dm_mod [last unloaded: scsi_wait_scan] [ 76.376670] [ 76.376670] Pid: 6183, comm: getkeycodes Not tainted 2.6.34 #11 C51MCP51/ [ 76.376670] EIP: 0060:[c138b6d0] EFLAGS: 00210046 CPU: 0 [ 76.376670] EIP is at input_default_getkeycode_from_index+0x40/0x60 [ 76.376670] EAX: EBX: ECX: 0002 EDX: f53ebdc8 [ 76.376670] ESI: f53ebdc8 EDI: f5daf794 EBP: f53ebdb8 ESP: f53ebdb4 [ 76.376670] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 76.376670] Process getkeycodes (pid: 6183, ti=f53ea000 task=f53bd060 task.ti=f53ea000) [ 76.376670] Stack: [ 76.376670] f5daf000 f53ebdec c138d233 f53ebe30 00200286 0004 [ 76.376670] 0 f53ebe2c f5da0340 c16c12cc f53ebdf8 c12f4148 [ 76.376670] 0 c12f4130 f53ebe24 c138d9f8 0002 0001 c138d980 c12f4130 [ 76.376670] Call Trace: [ 76.376670] [c138d233] ? input_get_keycode+0x73/0x90 input_default_getkeycode_from_index() returns the scancode at kt_entry.scancode pointer. Fill it with the scancode address at the function call. Thanks-to: Vladis Kletnieks valdis.kletni...@vt.edu for pointing the issue Cc: Dmitry Torokhov dmitry.torok...@gmail.com Signed-off-by: Mauro Carvalho Chehab mche...@redhat.com diff --git a/drivers/input/input.c b/drivers/input/input.c index 3b63fad..7851d8e 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -838,6 +838,7 @@ int input_get_keycode(struct input_dev *dev, memset(kt_entry, 0, sizeof(kt_entry)); kt_entry.len = 4; kt_entry.index = scancode; + kt_entry.scancode = scancode; In time: - kt_entry.scancode = scancode; + kt_entry.scancode = (char *)scancode; Otherwise, a warning would be produced ;) spin_lock_irqsave(dev-event_lock, flags); retval = dev-getkeycodebig_from_index(dev, kt_entry); -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- Cheers, Mauro -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [GIT PULL for 2.6.35] V4L/DVB updates
Hi Mauro/Linux DVB developers, Can someone please review the following patch asap? https://patchwork.kernel.org/patch/97358/ I may not have access to the testbed for long because I'm leaving my university soon. I had been using the fix introduced through this patch on my testbed since 2.6.32 and had not experienced any issue of dropped packets yet. If there is any problem with this patch, I can follow up while I'm still here. I would like take this opportunity to express my gratitude towards Linux DVB developers. Without you guys, I won't have any platform for my research. Thanks a lot. Regards, Ang Way Chuang -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html