V4L/DVB (4657): Power control of the device for dual board
authorPatrick Boettcher <pb@linuxtv.org>
Wed, 20 Sep 2006 09:06:11 +0000 (06:06 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Tue, 3 Oct 2006 18:13:18 +0000 (15:13 -0300)
Corrected power control of the device for dual boards

Signed-off-by: Patrick Boettcher <pb@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/dvb-usb/dvb-usb-init.c
drivers/media/dvb/dvb-usb/dvb-usb.h

index 0dd90d1fe67c30006abb85ee8488bcf2d2c6604b..ffdde83d1e77be6be34e5068f9a1b34adbdcd5e6 100644 (file)
@@ -136,7 +136,7 @@ static int dvb_usb_init(struct dvb_usb_device *d)
                if (d->priv == NULL) {
                        err("no memory for priv in 'struct dvb_usb_device'");
                        return -ENOMEM;
-       }
+               }
        }
 
 /* check the capabilities and set appropriate variables */
@@ -197,8 +197,13 @@ static struct dvb_usb_device_description * dvb_usb_find_device(struct usb_device
 
 int dvb_usb_device_power_ctrl(struct dvb_usb_device *d, int onoff)
 {
-       if (d->powered == !onoff) {
-               d->powered = onoff;
+       if (onoff)
+               d->powered++;
+       else
+               d->powered--;
+
+       if (d->powered == 0 || (onoff && d->powered == 1)) { // when switching from 1 to 0 or from 0 to 1
+               deb_info("power control: %d\n", onoff);
                if (d->props.power_ctrl)
                        return d->props.power_ctrl(d, onoff);
        }
index 2ec7c777fcef8222ecf103f89f12220558b24292..376c45a8e77991712260386717a22c12757930a6 100644 (file)
@@ -325,6 +325,8 @@ struct dvb_usb_adapter {
  * @desc: pointer to the device's struct dvb_usb_device_description.
  * @state: initialization and runtime state of the device.
  *
+ * @powered: indicated whether the device is power or not.
+ *  Powered is in/decremented for each call to modify the state.
  * @udev: pointer to the device's struct usb_device.
  *
  * @usb_mutex: semaphore of USB control messages (reading needs two messages)