]> err.no Git - linux-2.6/commitdiff
V4L/DVB (4392): Fix dst_ca attach
authorAndrew de Quincey <adq_dvb@lidskialf.net>
Tue, 8 Aug 2006 12:10:09 +0000 (09:10 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Tue, 26 Sep 2006 14:53:29 +0000 (11:53 -0300)
Move the call to dst_attach into the dst_attach function to eliminate
problems caused with dvb_attach.

Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Acked-by: Manu Abraham <manu@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/bt8xx/dst.c
drivers/media/dvb/bt8xx/dst_ca.c
drivers/media/dvb/bt8xx/dst_common.h
drivers/media/dvb/bt8xx/dvb-bt8xx.c

index a853c14c61d33103c091e7682266478e586e4f46..52b6fb2455f9670e8e33dd8d78b9f0ae67f133bd 100644 (file)
@@ -1715,12 +1715,6 @@ static int dst_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_paramet
 static void dst_release(struct dvb_frontend *fe)
 {
        struct dst_state *state = fe->demodulator_priv;
-
-#ifdef CONFIG_DVB_CORE_ATTACH
-       if (state->dst_hw_cap & DST_TYPE_HAS_CA)
-               symbol_put(dst_ca_attach);
-#endif
-
        kfree(state);
 }
 
@@ -1758,6 +1752,11 @@ struct dst_state *dst_attach(struct dst_state *state, struct dvb_adapter *dvb_ad
        }
        state->frontend.demodulator_priv = state;
 
+       /*      Attach other DST peripherals if any             */
+       /*      Conditional Access device                       */
+       if (state->dst_hw_cap & DST_TYPE_HAS_CA)
+               dst_ca_attach(state, dvb_adapter);
+
        return state;                           /*      Manu (DST is a card not a frontend)     */
 }
 
index c4ff1abc15c3d26e8472f18228d31205f945283c..df0f68fbf24b04ec51f7ce1722cc8bd2cc6eae7e 100644 (file)
@@ -699,12 +699,11 @@ static struct dvb_device dvbdev_ca = {
        .fops = &dst_ca_fops
 };
 
-ssize_t dst_ca_attach(struct dst_state *dst, struct dvb_adapter *dvb_adapter)
+void dst_ca_attach(struct dst_state *dst, struct dvb_adapter *dvb_adapter)
 {
        struct dvb_device *dvbdev;
        dprintk(verbose, DST_CA_ERROR, 1, "registering DST-CA device");
        dvb_register_device(dvb_adapter, &dvbdev, &dvbdev_ca, dst, DVB_DEVICE_CA);
-       return 1; // must return non-zero for dvb_attach() to work
 }
 
 EXPORT_SYMBOL(dst_ca_attach);
index 383452f9e497651be7d6461b3110b3cdb00d2782..66bc082824ad0e7833c86edb19e8212f92bf2fbe 100644 (file)
@@ -178,7 +178,7 @@ int write_dst(struct dst_state *state, u8 * data, u8 len);
 int read_dst(struct dst_state *state, u8 * ret, u8 len);
 u8 dst_check_sum(u8 * buf, u32 len);
 struct dst_state* dst_attach(struct dst_state* state, struct dvb_adapter *dvb_adapter);
-ssize_t dst_ca_attach(struct dst_state *state, struct dvb_adapter *dvb_adapter);
+void dst_ca_attach(struct dst_state *state, struct dvb_adapter *dvb_adapter);
 int dst_gpio_outb(struct dst_state* state, u32 mask, u32 enbb, u32 outhigh, int delay);
 
 int dst_command(struct dst_state* state, u8 * data, u8 len);
index db1eba9a5c36bf7bb81caa0e18654ee505764f59..a19991f7af47b2f8844fd3c2b98bc2b02e698f0b 100644 (file)
@@ -676,11 +676,6 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
                        break;
                }
                card->fe = &state->frontend;
-
-               /*      Attach other DST peripherals if any             */
-               /*      Conditional Access device                       */
-               if (state->dst_hw_cap & DST_TYPE_HAS_CA)
-                       dvb_attach(dst_ca_attach, state, &card->dvb_adapter);
                break;
 
        case BTTV_BOARD_PINNACLESAT: