All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans Verkuil <hverkuil@xs4all.nl>
To: "edubezval@gmail.com" <edubezval@gmail.com>
Cc: Dinesh Ram <dinram@cisco.com>,
	Linux-Media <linux-media@vger.kernel.org>,
	Dino d <dinesh.ram@cern.ch>
Subject: Re: [PATCH 3/6] si4713 : Bug fix for si4713_tx_tune_power() method in the i2c driver
Date: Mon, 02 Sep 2013 08:59:55 +0200	[thread overview]
Message-ID: <5224376B.8020003@xs4all.nl> (raw)
In-Reply-To: <CAC-25o8r4xMY_LFDMpszHZqoi0h13CR1wZYVXVHOmuorTmU=rg@mail.gmail.com>

On 09/01/2013 04:57 PM, edubezval@gmail.com wrote:
> Hello Hans,
> 
> On Sun, Sep 1, 2013 at 7:04 AM, Hans Verkuil <hverkuil@xs4all.nl> wrote:
>> On 08/31/2013 01:49 PM, edubezval@gmail.com wrote:
>>> Hi Dinesh,
>>>
>>> On Fri, Aug 30, 2013 at 7:28 AM, Dinesh Ram <dinram@cisco.com> wrote:
>>>> In the si4713_tx_tune_power() method, the args array element 'power' can take values between
>>>> SI4713_MIN_POWER and SI4713_MAX_POWER. power = 0 is also valid.
>>>> All the values (0 > power < SI4713_MIN_POWER) are illegal and hence
>>>> are all mapped to SI4713_MIN_POWER.
>>>
>>> While do we need to assume min power in these cases?
> 
> s/While/Why! but I guess you already got it.
> 
>>
>> It makes no sense to map 0 < powers < MIN_POWER to 0 (i.e. power off). I would never
>> expect that selecting a power > 0 would actually turn off power, so just map to the
>> lowest possible power value.
> 
> Hmm.. Interesting. Is this what you are seen currently?
> 0 < power < MIN_POWER == power off?

Currently trying to use a power value in that range will result in the EDOM
error. But that's quite unexpected for a control that's defined for the range
[0..MAX_POWER]. So rather than return an error you map it internally to the
lowest power value.

> 
> I would expect the driver to return an error code:
> 
>     if (((power > 0) && (power < SI4713_MIN_POWER)) ||
>         power > SI4713_MAX_POWER || antcap > SI4713_MAX_ANTCAP)
>         return -EDOM;
> 
> And that is why I am asking why are we assigning a min value when we
> see a value out of the expected range?

The hardware expects the value 0 or a value in the range [MIN_POWER..MAX_POWER].
The control expects a value in the range [0..MAX_POWER]. In order to prevent
the driver from returning -EDOM for values in the range [1..MIN_POWER> we
map those values to MIN_POWER. Returning an error in this case is not allowed
by the V4L2 specification.

> 
>>
>>>
>>>>
>>>> Signed-off-by: Dinesh Ram <dinram@cisco.com>
>>>> ---
>>>>  drivers/media/radio/si4713/si4713.c | 16 ++++++++--------
>>>>  1 file changed, 8 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/drivers/media/radio/si4713/si4713.c b/drivers/media/radio/si4713/si4713.c
>>>> index 55c4d27..5d0be87 100644
>>>> --- a/drivers/media/radio/si4713/si4713.c
>>>> +++ b/drivers/media/radio/si4713/si4713.c
>>>> @@ -550,14 +550,14 @@ static int si4713_tx_tune_freq(struct si4713_device *sdev, u16 frequency)
>>>>  }
>>>>
>>>>  /*
>>>> - * si4713_tx_tune_power - Sets the RF voltage level between 88 and 115 dBuV in
>>>> + * si4713_tx_tune_power - Sets the RF voltage level between 88 and 120 dBuV in
>>>>   *                     1 dB units. A value of 0x00 indicates off. The command
>>>>   *                     also sets the antenna tuning capacitance. A value of 0
>>>>   *                     indicates autotuning, and a value of 1 - 191 indicates
>>>>   *                     a manual override, which results in a tuning
>>>>   *                     capacitance of 0.25 pF x @antcap.
>>>>   * @sdev: si4713_device structure for the device we are communicating
>>>> - * @power: tuning power (88 - 115 dBuV, unit/step 1 dB)
>>>> + * @power: tuning power (88 - 120 dBuV, unit/step 1 dB)
>>>>   * @antcap: value of antenna tuning capacitor (0 - 191)
>>>>   */
>>>>  static int si4713_tx_tune_power(struct si4713_device *sdev, u8 power,
>>>> @@ -571,16 +571,16 @@ static int si4713_tx_tune_power(struct si4713_device *sdev, u8 power,
>>>>          *      .Third byte = power
>>>>          *      .Fourth byte = antcap
>>>>          */
>>>> -       const u8 args[SI4713_TXPWR_NARGS] = {
>>>> +       u8 args[SI4713_TXPWR_NARGS] = {
>>>>                 0x00,
>>>>                 0x00,
>>>>                 power,
>>>>                 antcap,
>>>>         };
>>>>
>>>> -       if (((power > 0) && (power < SI4713_MIN_POWER)) ||
>>>> -               power > SI4713_MAX_POWER || antcap > SI4713_MAX_ANTCAP)
>>>> -               return -EDOM;
>>>> +       /* Map power values 1-87 to MIN_POWER (88) */
>>>> +       if (power > 0 && power < SI4713_MIN_POWER)
>>>> +               args[2] = power = SI4713_MIN_POWER;
>>>
>>> Why are you allowing antcap > SI4713_MAX_ANTCAP? and power >
>>> SI4713_MAX_POWER too?
>>
>> The control framework already checks for that so you'll never see out-of-range values
>> here. So it was an unnecessary check.
>>
> 
> I see. Are you sure about that?

I wrote the control framework, so yes, I'm sure about that. One of the reasons for the
framework was to prevent all these checks in all the drivers.

> 
> I am just a bit concerned about regulations here. One can really get
> in trouble if it can transmit FM for longer than 10m in some
> countries, without a license.

Well, I assume Nokia knew what they were doing when they wrote this driver.
AFAIK these devices are all low power with low ranges, meant for the mobile
market.

Regards,

	Hans

> I know of some nasty ways to boost transmitting power, but I would
> like to avoid making even easier with this driver. :-)
> 
>>>
>>>>
>>>>         err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_POWER,
>>>>                                   args, ARRAY_SIZE(args), val,
>>>> @@ -1457,9 +1457,9 @@ static int si4713_probe(struct i2c_client *client,
>>>>                         V4L2_CID_TUNE_PREEMPHASIS,
>>>>                         V4L2_PREEMPHASIS_75_uS, 0, V4L2_PREEMPHASIS_50_uS);
>>>>         sdev->tune_pwr_level = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
>>>> -                       V4L2_CID_TUNE_POWER_LEVEL, 0, 120, 1, DEFAULT_POWER_LEVEL);
>>>> +                       V4L2_CID_TUNE_POWER_LEVEL, 0, SI4713_MAX_POWER, 1, DEFAULT_POWER_LEVEL);
>>>>         sdev->tune_ant_cap = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
>>>> -                       V4L2_CID_TUNE_ANTENNA_CAPACITOR, 0, 191, 1, 0);
>>>> +                       V4L2_CID_TUNE_ANTENNA_CAPACITOR, 0, SI4713_MAX_ANTCAP, 1, 0);
>>>>
>>>>         if (hdl->error) {
>>>>                 rval = hdl->error;
>>>> --
>>>> 1.8.4.rc2
>>>>
>>>> --
>>>> 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
>>>
>>>
>>>
>>
>> Regards,
>>
>>         Hans
> 
> 
> 


  reply	other threads:[~2013-09-02  7:00 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-30 11:28 [PATCH 0/6] si4713 : USB driver Dinesh Ram
2013-08-30 11:28 ` [PATCH 1/6] si4713 : Reorganized drivers/media/radio directory Dinesh Ram
2013-08-30 11:28   ` [PATCH 2/6] si4713 : Modified i2c driver to handle cases where interrupts are not used Dinesh Ram
2013-08-31 11:31     ` edubezval
2013-09-01 10:57       ` Hans Verkuil
2013-09-01 14:45         ` edubezval
2013-09-02  7:11           ` Hans Verkuil
2013-09-02 10:29             ` Dinesh Ram
2013-09-03 12:50               ` edubezval
2013-09-30 13:07               ` Hans Verkuil
2013-09-30 14:32                 ` Dinesh Ram
     [not found]         ` <1378046534.45961.YahooMailNeo@web190905.mail.sg3.yahoo.com>
2013-09-01 14:51           ` edubezval
2013-08-31 11:32     ` edubezval
2013-09-01 11:00       ` Hans Verkuil
2013-09-01 14:47         ` edubezval
2013-08-30 11:28   ` [PATCH 3/6] si4713 : Bug fix for si4713_tx_tune_power() method in the i2c driver Dinesh Ram
2013-08-31 11:49     ` edubezval
2013-09-01 11:04       ` Hans Verkuil
2013-09-01 14:57         ` edubezval
2013-09-02  6:59           ` Hans Verkuil [this message]
2013-09-02  7:15             ` Hans Verkuil
2013-08-30 11:28   ` [PATCH 4/6] si4713 : HID blacklist Si4713 USB development board Dinesh Ram
2013-08-30 11:47     ` Jiri Kosina
2013-09-02  9:23     ` Jiri Kosina
2013-08-30 11:28   ` [PATCH 5/6] si4713 : Added the USB driver for Si4713 Dinesh Ram
2013-09-02  3:13     ` edubezval
2013-08-30 11:28   ` [PATCH 6/6] si4713 : Added MAINTAINERS entry for radio-usb-si4713 driver Dinesh Ram
2013-08-30 12:07     ` Hans Verkuil
2013-08-31 11:38   ` [PATCH 1/6] si4713 : Reorganized drivers/media/radio directory edubezval
2013-08-30 12:09 ` [PATCH 0/6] si4713 : USB driver Hans Verkuil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5224376B.8020003@xs4all.nl \
    --to=hverkuil@xs4all.nl \
    --cc=dinesh.ram@cern.ch \
    --cc=dinram@cisco.com \
    --cc=edubezval@gmail.com \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.