Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Antti Palosaari and committed by
Mauro Carvalho Chehab
1b303e1a fea9c63a

+19 -7
+19 -7
drivers/media/usb/airspy/airspy.c
··· 81 81 struct airspy_format { 82 82 char *name; 83 83 u32 pixelformat; 84 + u32 buffersize; 84 85 }; 85 86 86 87 /* format descriptions for capture and preview */ 87 88 static struct airspy_format formats[] = { 88 89 { 89 90 .name = "Real U12LE", 90 - .pixelformat = V4L2_SDR_FMT_RU12LE, 91 + .pixelformat = V4L2_SDR_FMT_RU12LE, 92 + .buffersize = BULK_BUFFER_SIZE, 91 93 }, 92 94 }; 93 95 ··· 138 136 unsigned int f_adc; 139 137 unsigned int f_rf; 140 138 u32 pixelformat; 139 + u32 buffersize; 141 140 142 141 /* Controls */ 143 142 struct v4l2_ctrl_handler hdl; ··· 503 500 if (vq->num_buffers + *nbuffers < 8) 504 501 *nbuffers = 8 - vq->num_buffers; 505 502 *nplanes = 1; 506 - sizes[0] = PAGE_ALIGN(BULK_BUFFER_SIZE); 503 + sizes[0] = PAGE_ALIGN(s->buffersize); 507 504 508 505 dev_dbg(&s->udev->dev, "%s: nbuffers=%d sizes[0]=%d\n", 509 506 __func__, *nbuffers, sizes[0]); ··· 638 635 dev_dbg(&s->udev->dev, "%s: pixelformat fourcc %4.4s\n", __func__, 639 636 (char *)&s->pixelformat); 640 637 641 - memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved)); 642 638 f->fmt.sdr.pixelformat = s->pixelformat; 639 + f->fmt.sdr.buffersize = s->buffersize; 640 + memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved)); 643 641 644 642 return 0; 645 643 } ··· 661 657 memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved)); 662 658 for (i = 0; i < NUM_FORMATS; i++) { 663 659 if (formats[i].pixelformat == f->fmt.sdr.pixelformat) { 664 - s->pixelformat = f->fmt.sdr.pixelformat; 660 + s->pixelformat = formats[i].pixelformat; 661 + s->buffersize = formats[i].buffersize; 662 + f->fmt.sdr.buffersize = formats[i].buffersize; 665 663 return 0; 666 664 } 667 665 } 668 666 669 - f->fmt.sdr.pixelformat = formats[0].pixelformat; 670 667 s->pixelformat = formats[0].pixelformat; 668 + s->buffersize = formats[0].buffersize; 669 + f->fmt.sdr.pixelformat = formats[0].pixelformat; 670 + f->fmt.sdr.buffersize = formats[0].buffersize; 671 671 672 672 return 0; 673 673 } ··· 687 679 688 680 memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved)); 689 681 for (i = 0; i < NUM_FORMATS; i++) { 690 - if (formats[i].pixelformat == f->fmt.sdr.pixelformat) 682 + if (formats[i].pixelformat == f->fmt.sdr.pixelformat) { 683 + f->fmt.sdr.buffersize = formats[i].buffersize; 691 684 return 0; 685 + } 692 686 } 693 687 694 688 f->fmt.sdr.pixelformat = formats[0].pixelformat; 689 + f->fmt.sdr.buffersize = formats[0].buffersize; 695 690 696 691 return 0; 697 692 } ··· 1014 1003 s->udev = udev; 1015 1004 s->f_adc = bands[0].rangelow; 1016 1005 s->f_rf = bands_rf[0].rangelow; 1017 - s->pixelformat = V4L2_SDR_FMT_RU12LE; 1006 + s->pixelformat = formats[0].pixelformat; 1007 + s->buffersize = formats[0].buffersize; 1018 1008 1019 1009 /* Detect device */ 1020 1010 ret = airspy_ctrl_msg(s, CMD_BOARD_ID_READ, 0, 0, &u8tmp, 1);