Hello,

and thank you for the comments. 

On Fri, 2010-11-26 at 12:56 +0100, ext Samuel Ortiz wrote:
> > +config WL1273_CORE
> > +     tristate
> > +     depends on I2C
> > +     select MFD_CORE
> > +     default n
> > +
> You need to be a lot more verbose here. Nobody knows what this wl1273 core
> driver is for.
> Also, please rename your config to MFD_WL1273_CORE.

I added a bit of explanation and also renamed the config.


> > +#include <linux/delay.h>
> Not needed

Removed all unnecessary includes.

> > +             struct mfd_cell *cell = &core->cells[children];
> Please add a line between your variable declarations and the rest of the code.

Eventually I moved these definitions to the beginning of the function.

> > +     } else {
> > +             dev_err(&client->dev, "Cannot function without radio 
> > child.\n");
> > +             r = -EINVAL;
> > +             goto err_radio_child;
> > +     }
> So I'd prefer something like:
> 
> if (!pdata->children & WL1273_RADIO_CHILD) {
>         dev_err(...);
>         return -EINVAL;
> }
>
> before you actually allocate the core pointer.

Moved this test to the beginning of the function.


> > +     if (!r)
> > +             return 0;
> 
> I'd prefere:
> 
> if (children == 0) {
>         dev_err(....);
>         r = -ENODEV;
>         goto err;
> }
> 
> 
> dev_dbg(....);
> 
> return mfd_add_devices();
> 
> err:
>         ....    

I did more or less what Samuel suggested but kept the test for the
mfd_add_devices return value to be able to free resources in case
of error.

> > +     return 0;
> Here you can just return r.

Yes.

> > +     flush_scheduled_work();
>
> What is that for ?

I forgot that when refactoring the code. Removed.


> > + * include/media/radio/radio-wl1273.h
> This is include/linux/mfd/wl1273-core.h

Correct.

> > + * Copyright (C) Nokia Corporation
> You want to specify a year here.

Added year to all copyright statements.

> > +#ifndef RADIO_WL1273_H
> #ifndef WL1273_CORE_H, please.

OK.

> > +#include <linux/i2c.h>
> > +#include <linux/mfd/core.h>
> You don't want all your drivers to include mfd/core.h. And that may apply to
> i2c.h as well.

Both are directly needed in this header so I kept these includes.

> > +struct wl1273_fw_packet{
> > +     int len;
> > +     __u8 *buf;
> > +};
> Do you really need to export this structure ?

No. It actually become completely obsoleted so: removed.

> > +     int (*write)(struct wl1273_core *core, u8, u16);
> > +     int (*set_audio)(struct wl1273_core *core, unsigned int);
> > +     int (*set_volume)(struct wl1273_core *core, unsigned int);
> So who is defining those routines ?

They are defined in the V4L2 driver. Previously they were defined here 
in the core...


On Fri, 2010-11-19 at 18:33 +0530, ext Raja Mani wrote:
> > +static int radio_nr = -1;
> 
> You have assigned -1 to radio_nr here. But your description says "The
> default is 0".
> I am bit confused...

I was also confused, so I removed the initialization.

> > +MODULE_PARM_DESC(radio_nr, "Radio Nr");
> 
> Can we add clear comments instead "Radio Nr" ?. I know other driver
> has this kind of description
> What you added for "rds_buf" is more clear. This is only a suggestion..

Wrote a longer explanation.


> > +       struct i2c_client *client = core->client;
> > +
> 
> No space here
> 
> > +       u8 buf[] = { (param >> 8) & 0xff, param & 0xff }

OK.

> > +       r = i2c_transfer(client->adapter, &msg, 1);
> > +
> 
> No space here
> 
> > +       if (r != 1) {

OK.

> > +       val = volume;
> Really do we need val variable here ?

I wanted to have a pointer to u16...

> > +               r = wl1273_fm_read_reg(core, WL1273_RSSI_LVL_GET, &level);
> > +
> 
> No space here
> > +               if (r)

OK.

> > +       INIT_COMPLETION(radio->busy);
> > +       /* Set the current tx channel */
> > +       r = wl1273_fm_write_cmd(core, WL1273_CHANL_SET, freq / 10);
> > +       if (r)
> > +               return r;
> > +
> 
> Better , radio->busy init can be moved here.. there can be a chance to
> hit above return..

OK. I also did the other similar changes.


> > +       INIT_COMPLETION(radio->busy);
> > +       r = wl1273_fm_write_cmd(core, WL1273_TUNER_MODE_SET, 
> > TUNER_MODE_PRESET);
> > +       if (r) {
> > +               dev_err(radio->dev, "TUNER_MODE_SET fails\n");
> 
> why complete here ? radio->busy is just initialized .. who is waiting
> on radio->busy ?

A good question. I removed the complete call and moved the init after the test.

> > +
> > +               return 0;
>
> probably, you have to return negative error . not Zero.  Isn't it
> mandatory to download FM Firmware ?

I kept this as it was because we are uploading only a firmware patch,
which may not be necessary. Added a comment, however.

> > +               goto out;
> > +       }
>
> should we need "packets " ? . Can't we deal with fw_p->data itself for
> firmware download?
> we can avoid eating system memory.. Give a thought on this..

I got rid of the packets.

Cheers,
Matti

Matti J. Aaltonen (2):
  MFD: WL1273 FM Radio: MFD driver for the FM radio.
  V4L2: WL1273 FM Radio: TI WL1273 FM radio driver

 drivers/media/radio/Kconfig        |   16 +
 drivers/media/radio/Makefile       |    1 +
 drivers/media/radio/radio-wl1273.c | 2331 ++++++++++++++++++++++++++++++++++++
 drivers/mfd/Kconfig                |   10 +
 drivers/mfd/Makefile               |    1 +
 drivers/mfd/wl1273-core.c          |  148 +++
 include/linux/mfd/wl1273-core.h    |  288 +++++
 7 files changed, 2795 insertions(+), 0 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to