[PATCH v10 0/4] WL1273 FM Radio driver.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello all.

This is the tenth version of this patch set. Thank you for
comments, especially to Mauro.

I'll go through Mauro's comments one by one.

Patch 1/4:

>> +     case V4L2_CID_FM_BAND:                  return "FM Band";
>
> There's no need for a FM control, as there's already an ioctl pair
> that allows get/set the frequency bandwidth: VIDIOC_S_TUNER and
> VIDIOC_G_TUNER. So, the entire patch here seems uneeded/unwanted.

OK, I've taken this approach to bands.

2/4:

>> +MODULE_PARM_DESC(radio_band, "Band: 0=USA-Europe, 1=Japan");
>
> There's no need for a parameter to set the bandwidth.

Agreed & removed...


>> +MODULE_PARM_DESC(rds_buf, "RDS buffer entries: *100*");
>
> Hmm... it would be better to use, instead:
> 
> MODULE_PARM_DESC(rds_buf, "Number of RDS buffer entries. Default = 100");

Yes that's a better wording. Changed.

>> +EXPORT_SYMBOL(wl1273_fm_read_reg);
>
> Hmm... why do you need to export a symbol here?

This is something I didn't change (yet). I'll try to explain. Our original
idea for the driver structure was like this.

            codec       v4l2 controls
               \           /
                \         /
                 \       /
               the mfd core 

Mauro's idea is to merge the control child to the core and get rid of
the function exports. But because of the codec child many of the
exports would still be needed. And it makes sense to have the codec as
a separate module because the radio could be used without digital
audio. So I'm kind of against a major rewrite between v9 and v10
because in my view having v4l2 part as a separate module is not that
bad...

>> +static void wl1273_fm_rds_work(struct wl1273_core *core)
>> +{
>> +     wl1273_fm_rds(core);
>> +}
>
> Wouldn't be better to just use wl1273_fm_rds() instead of this?

Yes... fixed.

>> +     /* RDS buffer allocation */
>> +     core->buf_size = rds_buf * 3;
>
> Why it should be multiplied by a "random"value of 3?

Added a #define for the RDS block length.

>> +obj-$(CONFIG_RADIO_WL1273) += radio-wl1273.o
>>
>
> From what I saw, wl1273-core and radio-wl1273 are just part of the
> same radio driver.  So, the better would be to just merge them into
> one driver module, with something like:
> 
>obj-wl1273.o = radio-wl1273.o wl1273-core.o
>obj-$(CONFIG_RADIO_WL1273) += radio-wl1273.o
> 
> And remove all those export_symbol' s from wl1273-core.

Didn't do this (yet) for the reasons mentioned above....

3/4:

>> +#define DRIVER_DESC "Wl1273 FM Radio - V4L2"
>
> Why V4L2??? Just call it as "Wl1273 FM Radio".

That is - I guess - a good question, and I removed the " - V4L2". My
idea was to differentiate between the core, codec and the v4l2 part, 
that idea evidently wasn't a good one...

>> +     msgs = kmalloc((packet_num + 1)*sizeof(struct i2c_msg), GFP_KERNEL);
>
> Small CodingStyle issue: please use spaces between "*" operator: msgs
>        = kmalloc((packet_num + 1) * sizeof(struct i2c_msg),
>        GFP_KERNEL);

Fixed...

>> +static int wl1273_fm_set_band(struct wl1273_core *core, unsigned int band)
>> +{
>
> Should be adjusted to use VIDIOC_[G|S]_TUNER for RX.

Done. Internally the driver still kind of has two bands because that's
how the chip is. g_tuner returns the range 76 - 108MHz, which is the 
combination of the two internal ranges.

s_tuner select either of the ranges, and returns an error if the requested
range doesn't fit into either supported ranges. Are you happy with this
approach?

>> +     /* calculate block count from byte count */
>> +     count /= 3;
>
> Why the "magic" value of 3? Instead, please define a constant, naming
> it in a way that a casual code reviewer could understand why you're
> multiplying/dividing by 3.

Replaced all the magic numbers with the define constant.

>> +             r = wl1273_fm_set_band(core, ctrl->val);
>> +             break;
>
> Not needed. Instead, please implement it via VIDIOC_S_TUNER.

Done...


>> +     dev_dbg(radio->dev, "tuner->rangehigh: %d\n", tuner->rangehigh);
>
> Ranges should be using tuner->rangelow/rangehigh to change band limits.

Yes. Fixed.

>> +     }
>
> Please do the registration of the device at the end. Applications may
> try to open (and udev, in fact does it) the device while you're still
> initializing it. If you need to do it earlier, you'll need a lock
> protecting open/close/init, to avoid race conditions.

Moved the registration to the end of the probe function.

4/4:

>> new FM RX control class.
>
> Same comment as patch 1/4: FM bandwidth can already be defined via
> VIDIOC_[G|S]_TUNER.  So, this patch is just creating a duplicated API
> for something already defined.

Changed the documentation to reflect the changes in the code.


Cheers,
Matti

Matti J. Aaltonen (4): V4L2: Add seek spacing and RDS CAP bits.  MFD:
  WL1273 FM Radio: MFD driver for the FM radio.  V4L2: WL1273 FM
  Radio: Controls for the FM radio.  Documentation: v4l: Add hw_seek
  spacing and two TUNER_RDS_CAP flags.

 Documentation/DocBook/v4l/dev-rds.xml              |   10 +-
 .../DocBook/v4l/vidioc-s-hw-freq-seek.xml          |   10 +-
 drivers/media/radio/Kconfig                        |   15 +
 drivers/media/radio/Makefile                       |    1 +
 drivers/media/radio/radio-wl1273.c                 | 1859 ++++++++++++++++++++
 drivers/mfd/Kconfig                                |    5 +
 drivers/mfd/Makefile                               |    2 +
 drivers/mfd/wl1273-core.c                          |  585 ++++++
 include/linux/mfd/wl1273-core.h                    |  320 ++++
 include/linux/videodev2.h                          |    5 +-
 10 files changed, 2808 insertions(+), 4 deletions(-)
 create mode 100644 drivers/media/radio/radio-wl1273.c
 create mode 100644 drivers/mfd/wl1273-core.c
 create mode 100644 include/linux/mfd/wl1273-core.h

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux