Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 330646
b: refs/heads/master
c: a0921af
h: refs/heads/master
v: v3
  • Loading branch information
Antti Palosaari authored and Mauro Carvalho Chehab committed Aug 4, 2012
1 parent 246dd90 commit 9c3dfb5
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 53 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b905a2a13307035a4a5c9a93a3607e51e6736db2
refs/heads/master: a0921af7eb2eced1639fc1e1befdf703e7bec95a
2 changes: 1 addition & 1 deletion trunk/drivers/media/dvb/dvb-usb/af9015.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ static struct i2c_algorithm af9015_i2c_algo = {
.functionality = af9015_i2c_func,
};

static int af9015_identify_state(struct dvb_usb_device *d)
static int af9015_identify_state(struct dvb_usb_device *d, const char **name)
{
int ret;
u8 reply;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/media/dvb/dvb-usb/af9035.c
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ static struct i2c_algorithm af9035_i2c_algo = {
.functionality = af9035_i2c_functionality,
};

static int af9035_identify_state(struct dvb_usb_device *d)
static int af9035_identify_state(struct dvb_usb_device *d, const char **name)
{
int ret;
u8 wbuf[1] = { 1 };
Expand Down
11 changes: 4 additions & 7 deletions trunk/drivers/media/dvb/dvb-usb/dvb_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,12 +197,13 @@ struct dvb_usb_device_properties {
struct module *owner;
short *adapter_nr;
u8 bInterfaceNumber;

int size_of_priv;

#define WARM 0
#define COLD 1
int (*identify_state) (struct dvb_usb_device *, const char **);
const char *firmware;
int (*get_firmware_name) (struct dvb_usb_device *, const char **);
#define RECONNECTS_USB 1
#define RECONNECTS_USB 1
int (*download_firmware) (struct dvb_usb_device *,
const struct firmware *);

Expand All @@ -219,10 +220,6 @@ struct dvb_usb_device_properties {
int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
int (*fe_ioctl_override) (struct dvb_frontend *,
unsigned int, void *, unsigned int);

#define WARM 0
#define COLD 1
int (*identify_state) (struct dvb_usb_device *);
int (*init) (struct dvb_usb_device *);
void (*disconnect) (struct dvb_usb_device *);
int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
Expand Down
76 changes: 34 additions & 42 deletions trunk/drivers/media/dvb/dvb-usb/dvb_usb_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,10 @@ module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage,
MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a" \
" PID filter, if any (default: 0).");

static int dvb_usbv2_download_firmware(struct dvb_usb_device *d)
static int dvb_usbv2_download_firmware(struct dvb_usb_device *d, const char *name)
{
int ret;
const struct firmware *fw = NULL;
const char *name;

/* resolve firmware name */
name = d->props->firmware;
if (d->props->get_firmware_name) {
ret = d->props->get_firmware_name(d, &name);
if (ret < 0)
goto err;
}
const struct firmware *fw;

if (!d->props->download_firmware) {
ret = -EINVAL;
Expand Down Expand Up @@ -395,7 +386,6 @@ static void dvb_usbv2_init_work(struct work_struct *work)
int ret;
struct dvb_usb_device *d =
container_of(work, struct dvb_usb_device, probe_work);
bool cold = false;

d->work_pid = current->pid;

Expand All @@ -411,40 +401,42 @@ static void dvb_usbv2_init_work(struct work_struct *work)
}

if (d->props->identify_state) {
ret = d->props->identify_state(d);
const char *name = NULL;
ret = d->props->identify_state(d, &name);
if (ret == 0) {
;
} else if (ret == COLD) {
cold = true;
ret = 0;
} else {
goto err_usb_driver_release_interface;
}
}

if (cold) {
pr_info("%s: found a '%s' in cold state\n",
KBUILD_MODNAME, d->name);
ret = dvb_usbv2_download_firmware(d);
if (ret == 0) {
/* device is warm, continue initialization */
;
} else if (ret == RECONNECTS_USB) {
/*
* USB core will call disconnect() and then probe()
* as device reconnects itself from the USB bus.
* disconnect() will release all driver resources
* and probe() is called for 'new' device. As 'new'
* device is warm we should never go here again.
*/
return;
pr_info("%s: found a '%s' in cold state\n",
KBUILD_MODNAME, d->name);

if (!name)
name = d->props->firmware;

ret = dvb_usbv2_download_firmware(d, name);
if (ret == 0) {
/* device is warm, continue initialization */
;
} else if (ret == RECONNECTS_USB) {
/*
* USB core will call disconnect() and then
* probe() as device reconnects itself from the
* USB bus. disconnect() will release all driver
* resources and probe() is called for 'new'
* device. As 'new' device is warm we should
* never go here again.
*/
return;
} else {
/* Unexpected error. We must unregister driver
* manually from the device, because device is
* already register by returning from probe()
* with success. usb_driver_release_interface()
* finally calls disconnect() in order to free
* resources.
*/
goto err_usb_driver_release_interface;
}
} else {
/* Unexpected fatal error. We must unregister driver
* manually from the device, because device is already
* register by returning from probe() with success.
* usb_driver_release_interface() finally calls
* disconnect() in order to free resources.
*/
goto err_usb_driver_release_interface;
}
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/media/dvb/dvb-usb/ec168.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ static struct i2c_algorithm ec168_i2c_algo = {
};

/* Callbacks for DVB USB */
static int ec168_identify_state(struct dvb_usb_device *d)
static int ec168_identify_state(struct dvb_usb_device *d, const char **name)
{
int ret;
u8 reply;
Expand Down

0 comments on commit 9c3dfb5

Please sign in to comment.