Mauro, This fix should really go to Linus before 2.6.31 is released, if possible. It also should be backported to stable, but I need it in Linus' tree before it will be accepted into -stable. Do you think you can slip this in before the weekend? As I understand, Linus plans to release 2.6.31 on Saturday, September 5th. If you dont have time for it, please let me know and I will send it in myself. Thanks & regards, Mike Krufky On Tue, Sep 1, 2009 at 9:45 AM, Patch from Hans Verkuil<hg-commit@xxxxxxxxxxx> wrote: > The patch number 12613 was added via Hans Verkuil <hverkuil@xxxxxxxxx> > to http://linuxtv.org/hg/v4l-dvb master development tree. > > Kernel patches in this development tree may be modified to be backward > compatible with older kernels. Compatibility modifications will be > removed before inclusion into the mainstream Kernel > > If anyone has any objections, please let us know by sending a message to: > Linux Media Mailing List <linux-media@xxxxxxxxxxxxxxx> > > ------ > > From: Hans Verkuil <hverkuil@xxxxxxxxx> > cx25840: fix determining the firmware name > > > Depending on the model there are three different firmwares to choose from. > Unfortunately if a cx23885 is loaded first, then the global firmware name > is overwritten with that firmware and if ivtv is loaded next, then it > tries to load the wrong firmware. In addition, the original approach would > also overwrite any firmware that the user specified explicitly. > > Priority: normal > > Signed-off-by: Hans Verkuil <hverkuil@xxxxxxxxx> > CC: Jarod Wilson <jarod@xxxxxxxxxxxx> > > > --- > > linux/drivers/media/video/cx25840/cx25840-firmware.c | 35 ++++++----- > 1 file changed, 22 insertions(+), 13 deletions(-) > > diff -r f69cb015dc77 -r 36a81289010d linux/drivers/media/video/cx25840/cx25840-firmware.c > --- a/linux/drivers/media/video/cx25840/cx25840-firmware.c Mon Aug 31 22:21:04 2009 +0200 > +++ b/linux/drivers/media/video/cx25840/cx25840-firmware.c Mon Aug 31 22:57:52 2009 +0200 > @@ -24,10 +24,6 @@ > > #include "cx25840-core.h" > > -#define FWFILE "v4l-cx25840.fw" > -#define FWFILE_CX23885 "v4l-cx23885-avcore-01.fw" > -#define FWFILE_CX231XX "v4l-cx231xx-avcore-01.fw" > - > /* > * Mike Isely <isely@xxxxxxxxx> - The FWSEND parameter controls the > * size of the firmware chunks sent down the I2C bus to the chip. > @@ -41,11 +37,11 @@ > > #define FWDEV(x) &((x)->dev) > > -static char *firmware = FWFILE; > +static char *firmware = ""; > > module_param(firmware, charp, 0444); > > -MODULE_PARM_DESC(firmware, "Firmware image [default: " FWFILE "]"); > +MODULE_PARM_DESC(firmware, "Firmware image to load"); > > static void start_fw_load(struct i2c_client *client) > { > @@ -66,6 +62,19 @@ > cx25840_write(client, 0x803, 0x03); > } > > +static const char *get_fw_name(struct i2c_client *client) > +{ > + struct cx25840_state *state = to_state(i2c_get_clientdata(client)); > + > + if (firmware[0]) > + return firmware; > + if (state->is_cx23885) > + return "v4l-cx23885-avcore-01.fw"; > + if (state->is_cx231xx) > + return "v4l-cx231xx-avcore-01.fw"; > + return "v4l-cx25840.fw"; > +} > + > static int check_fw_load(struct i2c_client *client, int size) > { > /* DL_ADDR_HB DL_ADDR_LB */ > @@ -73,11 +82,13 @@ > s |= cx25840_read(client, 0x800); > > if (size != s) { > - v4l_err(client, "firmware %s load failed\n", firmware); > + v4l_err(client, "firmware %s load failed\n", > + get_fw_name(client)); > return -EINVAL; > } > > - v4l_info(client, "loaded %s firmware (%d bytes)\n", firmware, size); > + v4l_info(client, "loaded %s firmware (%d bytes)\n", > + get_fw_name(client), size); > return 0; > } > > @@ -97,26 +108,24 @@ > const struct firmware *fw = NULL; > u8 buffer[FWSEND]; > const u8 *ptr; > + const char *fwname = get_fw_name(client); > int size, retval; > int MAX_BUF_SIZE = FWSEND; > u32 gpio_oe = 0, gpio_da = 0; > > if (state->is_cx23885) { > - firmware = FWFILE_CX23885; > /* Preserve the GPIO OE and output bits */ > gpio_oe = cx25840_read(client, 0x160); > gpio_da = cx25840_read(client, 0x164); > } > - else if (state->is_cx231xx) > - firmware = FWFILE_CX231XX; > > if ((state->is_cx231xx) && MAX_BUF_SIZE > 16) { > v4l_err(client, " Firmware download size changed to 16 bytes max length\n"); > MAX_BUF_SIZE = 16; /* cx231xx cannot accept more than 16 bytes at a time */ > } > > - if (request_firmware(&fw, firmware, FWDEV(client)) != 0) { > - v4l_err(client, "unable to open firmware %s\n", firmware); > + if (request_firmware(&fw, fwname, FWDEV(client)) != 0) { > + v4l_err(client, "unable to open firmware %s\n", fwname); > return -EINVAL; > } > > > > --- > > Patch is available at: http://linuxtv.org/hg/v4l-dvb/rev/36a81289010d614758a64bd757ee37c8c154ad4b > > _______________________________________________ > linuxtv-commits mailing list > linuxtv-commits@xxxxxxxxxxx > http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits > -- 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