summaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/airspy
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2014-07-19 02:22:08 +0200
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-07-22 02:41:48 +0200
commit1b303e1a58599e42f858805285f03ccb5a4e18d2 (patch)
treed4b6e0faf469bafc1911d721465c4212f1261a45 /drivers/media/usb/airspy
parent[media] DocBook media: v4l2_sdr_format buffersize field (diff)
downloadlinux-1b303e1a58599e42f858805285f03ccb5a4e18d2.tar.xz
linux-1b303e1a58599e42f858805285f03ccb5a4e18d2.zip
[media] airspy: fill FMT buffer size
Fill FMT buffer size field in order to inform app which will be used streaming buffer size. Currently driver doesn't allow buffer size value proposed by application. Cc: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/usb/airspy')
-rw-r--r--drivers/media/usb/airspy/airspy.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/media/usb/airspy/airspy.c b/drivers/media/usb/airspy/airspy.c
index 72d9f2c40da3..cb0e515d80ae 100644
--- a/drivers/media/usb/airspy/airspy.c
+++ b/drivers/media/usb/airspy/airspy.c
@@ -81,13 +81,15 @@ static const struct v4l2_frequency_band bands_rf[] = {
struct airspy_format {
char *name;
u32 pixelformat;
+ u32 buffersize;
};
/* format descriptions for capture and preview */
static struct airspy_format formats[] = {
{
.name = "Real U12LE",
- .pixelformat = V4L2_SDR_FMT_RU12LE,
+ .pixelformat = V4L2_SDR_FMT_RU12LE,
+ .buffersize = BULK_BUFFER_SIZE,
},
};
@@ -136,6 +138,7 @@ struct airspy {
unsigned int f_adc;
unsigned int f_rf;
u32 pixelformat;
+ u32 buffersize;
/* Controls */
struct v4l2_ctrl_handler hdl;
@@ -500,7 +503,7 @@ static int airspy_queue_setup(struct vb2_queue *vq,
if (vq->num_buffers + *nbuffers < 8)
*nbuffers = 8 - vq->num_buffers;
*nplanes = 1;
- sizes[0] = PAGE_ALIGN(BULK_BUFFER_SIZE);
+ sizes[0] = PAGE_ALIGN(s->buffersize);
dev_dbg(&s->udev->dev, "%s: nbuffers=%d sizes[0]=%d\n",
__func__, *nbuffers, sizes[0]);
@@ -635,8 +638,9 @@ static int airspy_g_fmt_sdr_cap(struct file *file, void *priv,
dev_dbg(&s->udev->dev, "%s: pixelformat fourcc %4.4s\n", __func__,
(char *)&s->pixelformat);
- memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved));
f->fmt.sdr.pixelformat = s->pixelformat;
+ f->fmt.sdr.buffersize = s->buffersize;
+ memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved));
return 0;
}
@@ -657,13 +661,17 @@ static int airspy_s_fmt_sdr_cap(struct file *file, void *priv,
memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved));
for (i = 0; i < NUM_FORMATS; i++) {
if (formats[i].pixelformat == f->fmt.sdr.pixelformat) {
- s->pixelformat = f->fmt.sdr.pixelformat;
+ s->pixelformat = formats[i].pixelformat;
+ s->buffersize = formats[i].buffersize;
+ f->fmt.sdr.buffersize = formats[i].buffersize;
return 0;
}
}
- f->fmt.sdr.pixelformat = formats[0].pixelformat;
s->pixelformat = formats[0].pixelformat;
+ s->buffersize = formats[0].buffersize;
+ f->fmt.sdr.pixelformat = formats[0].pixelformat;
+ f->fmt.sdr.buffersize = formats[0].buffersize;
return 0;
}
@@ -679,11 +687,14 @@ static int airspy_try_fmt_sdr_cap(struct file *file, void *priv,
memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved));
for (i = 0; i < NUM_FORMATS; i++) {
- if (formats[i].pixelformat == f->fmt.sdr.pixelformat)
+ if (formats[i].pixelformat == f->fmt.sdr.pixelformat) {
+ f->fmt.sdr.buffersize = formats[i].buffersize;
return 0;
+ }
}
f->fmt.sdr.pixelformat = formats[0].pixelformat;
+ f->fmt.sdr.buffersize = formats[0].buffersize;
return 0;
}
@@ -1003,7 +1014,8 @@ static int airspy_probe(struct usb_interface *intf,
s->udev = udev;
s->f_adc = bands[0].rangelow;
s->f_rf = bands_rf[0].rangelow;
- s->pixelformat = V4L2_SDR_FMT_RU12LE;
+ s->pixelformat = formats[0].pixelformat;
+ s->buffersize = formats[0].buffersize;
/* Detect device */
ret = airspy_ctrl_msg(s, CMD_BOARD_ID_READ, 0, 0, &u8tmp, 1);