[2/2] solo6x10: Simplify solo_enum_ext_input
Commit Message
Additionally, now it specifies which channels it's showing.
Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
---
drivers/media/pci/solo6x10/solo6x10-v4l2.c | 27 +++++++++------------------
1 file changed, 9 insertions(+), 18 deletions(-)
Comments
Hi Ismael,
On 04/30/2016 05:17 AM, Ismael Luceno wrote:
> Additionally, now it specifies which channels it's showing.
>
> Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
> ---
> drivers/media/pci/solo6x10/solo6x10-v4l2.c | 27 +++++++++------------------
> 1 file changed, 9 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/media/pci/solo6x10/solo6x10-v4l2.c b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
> index 721ff53..935c1b6 100644
> --- a/drivers/media/pci/solo6x10/solo6x10-v4l2.c
> +++ b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
> @@ -386,26 +386,17 @@ static int solo_querycap(struct file *file, void *priv,
> static int solo_enum_ext_input(struct solo_dev *solo_dev,
> struct v4l2_input *input)
> {
> - static const char * const dispnames_1[] = { "4UP" };
> - static const char * const dispnames_2[] = { "4UP-1", "4UP-2" };
> - static const char * const dispnames_5[] = {
> - "4UP-1", "4UP-2", "4UP-3", "4UP-4", "16UP"
> - };
> - const char * const *dispnames;
> -
> - if (input->index >= (solo_dev->nr_chans + solo_dev->nr_ext))
> - return -EINVAL;
> -
> - if (solo_dev->nr_ext == 5)
> - dispnames = dispnames_5;
> - else if (solo_dev->nr_ext == 2)
> - dispnames = dispnames_2;
> - else
> - dispnames = dispnames_1;
> + int ext = input->index - solo_dev->nr_chans;
> + unsigned int nup, first;
>
> - snprintf(input->name, sizeof(input->name), "Multi %s",
> - dispnames[input->index - solo_dev->nr_chans]);
> + if (ext >= solo_dev->nr_ext)
> + return -EINVAL;
>
> + nup = (ext == 4) ? 16 : 4;
> + first = (ext & 3) << 2;
> + snprintf(input->name, sizeof(input->name),
> + "Multi %d-up (cameras %d-%d)",
> + nup, first + 1, first + nup);
Shouldn't this be: nup, first + 1, nup);
Now it displays cameras as 1-5, 2-6, 3-7, 4-8 if I am not mistaken.
Regards,
Hans
> return 0;
> }
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On 04/Mai/2016 10:02, Hans Verkuil wrote:
> Hi Ismael,
>
> On 04/30/2016 05:17 AM, Ismael Luceno wrote:
> > Additionally, now it specifies which channels it's showing.
> >
> > Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
> > ---
> > drivers/media/pci/solo6x10/solo6x10-v4l2.c | 27 +++++++++------------------
> > 1 file changed, 9 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/media/pci/solo6x10/solo6x10-v4l2.c b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
> > index 721ff53..935c1b6 100644
> > --- a/drivers/media/pci/solo6x10/solo6x10-v4l2.c
> > +++ b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
> > @@ -386,26 +386,17 @@ static int solo_querycap(struct file *file, void *priv,
> > static int solo_enum_ext_input(struct solo_dev *solo_dev,
> > struct v4l2_input *input)
> > {
> > - static const char * const dispnames_1[] = { "4UP" };
> > - static const char * const dispnames_2[] = { "4UP-1", "4UP-2" };
> > - static const char * const dispnames_5[] = {
> > - "4UP-1", "4UP-2", "4UP-3", "4UP-4", "16UP"
> > - };
> > - const char * const *dispnames;
> > -
> > - if (input->index >= (solo_dev->nr_chans + solo_dev->nr_ext))
> > - return -EINVAL;
> > -
> > - if (solo_dev->nr_ext == 5)
> > - dispnames = dispnames_5;
> > - else if (solo_dev->nr_ext == 2)
> > - dispnames = dispnames_2;
> > - else
> > - dispnames = dispnames_1;
> > + int ext = input->index - solo_dev->nr_chans;
> > + unsigned int nup, first;
> >
> > - snprintf(input->name, sizeof(input->name), "Multi %s",
> > - dispnames[input->index - solo_dev->nr_chans]);
> > + if (ext >= solo_dev->nr_ext)
> > + return -EINVAL;
> >
> > + nup = (ext == 4) ? 16 : 4;
> > + first = (ext & 3) << 2;
> > + snprintf(input->name, sizeof(input->name),
> > + "Multi %d-up (cameras %d-%d)",
> > + nup, first + 1, first + nup);
>
> Shouldn't this be: nup, first + 1, nup);
>
> Now it displays cameras as 1-5, 2-6, 3-7, 4-8 if I am not mistaken.
Hi Hans.
The var "first" takes the values {0, 4, 8, 12}, so the code is correct,
it displays: 1-4, 5-8, 9-12, 13-16, or 1-16.
Regards.
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/04/2016 01:42 PM, Ismael Luceno wrote:
> On 04/Mai/2016 10:02, Hans Verkuil wrote:
>> Hi Ismael,
>>
>> On 04/30/2016 05:17 AM, Ismael Luceno wrote:
>>> Additionally, now it specifies which channels it's showing.
>>>
>>> Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
>>> ---
>>> drivers/media/pci/solo6x10/solo6x10-v4l2.c | 27 +++++++++------------------
>>> 1 file changed, 9 insertions(+), 18 deletions(-)
>>>
>>> diff --git a/drivers/media/pci/solo6x10/solo6x10-v4l2.c b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
>>> index 721ff53..935c1b6 100644
>>> --- a/drivers/media/pci/solo6x10/solo6x10-v4l2.c
>>> +++ b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
>>> @@ -386,26 +386,17 @@ static int solo_querycap(struct file *file, void *priv,
>>> static int solo_enum_ext_input(struct solo_dev *solo_dev,
>>> struct v4l2_input *input)
>>> {
>>> - static const char * const dispnames_1[] = { "4UP" };
>>> - static const char * const dispnames_2[] = { "4UP-1", "4UP-2" };
>>> - static const char * const dispnames_5[] = {
>>> - "4UP-1", "4UP-2", "4UP-3", "4UP-4", "16UP"
>>> - };
>>> - const char * const *dispnames;
>>> -
>>> - if (input->index >= (solo_dev->nr_chans + solo_dev->nr_ext))
>>> - return -EINVAL;
>>> -
>>> - if (solo_dev->nr_ext == 5)
>>> - dispnames = dispnames_5;
>>> - else if (solo_dev->nr_ext == 2)
>>> - dispnames = dispnames_2;
>>> - else
>>> - dispnames = dispnames_1;
>>> + int ext = input->index - solo_dev->nr_chans;
>>> + unsigned int nup, first;
>>>
>>> - snprintf(input->name, sizeof(input->name), "Multi %s",
>>> - dispnames[input->index - solo_dev->nr_chans]);
>>> + if (ext >= solo_dev->nr_ext)
>>> + return -EINVAL;
>>>
>>> + nup = (ext == 4) ? 16 : 4;
>>> + first = (ext & 3) << 2;
>>> + snprintf(input->name, sizeof(input->name),
>>> + "Multi %d-up (cameras %d-%d)",
>>> + nup, first + 1, first + nup);
>>
>> Shouldn't this be: nup, first + 1, nup);
>>
>> Now it displays cameras as 1-5, 2-6, 3-7, 4-8 if I am not mistaken.
>
> Hi Hans.
>
> The var "first" takes the values {0, 4, 8, 12}, so the code is correct,
> it displays: 1-4, 5-8, 9-12, 13-16, or 1-16.
Ah, now I see what you do. Can you add a little comment here? For example:
/* Construct the text: cameras 1-4, 5-8, 9-12, 13-16, or 1-16 */
It's a bit obfuscated otherwise.
Thanks!
Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
@@ -386,26 +386,17 @@ static int solo_querycap(struct file *file, void *priv,
static int solo_enum_ext_input(struct solo_dev *solo_dev,
struct v4l2_input *input)
{
- static const char * const dispnames_1[] = { "4UP" };
- static const char * const dispnames_2[] = { "4UP-1", "4UP-2" };
- static const char * const dispnames_5[] = {
- "4UP-1", "4UP-2", "4UP-3", "4UP-4", "16UP"
- };
- const char * const *dispnames;
-
- if (input->index >= (solo_dev->nr_chans + solo_dev->nr_ext))
- return -EINVAL;
-
- if (solo_dev->nr_ext == 5)
- dispnames = dispnames_5;
- else if (solo_dev->nr_ext == 2)
- dispnames = dispnames_2;
- else
- dispnames = dispnames_1;
+ int ext = input->index - solo_dev->nr_chans;
+ unsigned int nup, first;
- snprintf(input->name, sizeof(input->name), "Multi %s",
- dispnames[input->index - solo_dev->nr_chans]);
+ if (ext >= solo_dev->nr_ext)
+ return -EINVAL;
+ nup = (ext == 4) ? 16 : 4;
+ first = (ext & 3) << 2;
+ snprintf(input->name, sizeof(input->name),
+ "Multi %d-up (cameras %d-%d)",
+ nup, first + 1, first + nup);
return 0;
}