rendered paste bodydiff -Naurp v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dst.c v4l-dvb/linux/drivers/media/dvb/bt8xx/dst.c--- v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dst.c 2006-08-02 00:12:33.000000000 +0400+++ v4l-dvb/linux/drivers/media/dvb/bt8xx/dst.c 2006-08-02 08:41:18.000000000 +0400@@ -1729,6 +1729,7 @@ static struct dvb_frontend_ops dst_atsc_ struct dst_state *dst_attach(struct dst_state *state, struct dvb_adapter *dvb_adapter) {+ /* check if the ASIC is there */ if (dst_probe(state) < 0) { kfree(state);@@ -1756,12 +1757,7 @@ struct dst_state *dst_attach(struct dst_ } 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) */+ return state; } EXPORT_SYMBOL(dst_attach);diff -Naurp v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dst_ca.c v4l-dvb/linux/drivers/media/dvb/bt8xx/dst_ca.c--- v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dst_ca.c 2006-08-02 00:12:33.000000000 +0400+++ v4l-dvb/linux/drivers/media/dvb/bt8xx/dst_ca.c 2006-08-02 08:41:22.000000000 +0400@@ -756,7 +756,10 @@ static int dst_ca_open(struct inode *ino static int dst_ca_release(struct inode *inode, struct file *file) {+ struct dst_state *state = file->private_data;+ dprintk(verbose, DST_CA_DEBUG, 1, " Device closed.");+ dvb_unregister_device(state->dst_ca); module_put(THIS_MODULE); return 0;@@ -795,11 +798,13 @@ static struct dvb_device dvbdev_ca = { .fops = &dst_ca_fops }; -void dst_ca_attach(struct dst_state *dst, struct dvb_adapter *dvb_adapter)+int 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);+ if (dvb_register_device(dvb_adapter, &dst->dst_ca, &dvbdev_ca, dst, DVB_DEVICE_CA))+ return -1;+ else+ return 0; } EXPORT_SYMBOL(dst_ca_attach);diff -Naurp v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dst_common.h v4l-dvb/linux/drivers/media/dvb/bt8xx/dst_common.h--- v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dst_common.h 2006-08-02 00:12:33.000000000 +0400+++ v4l-dvb/linux/drivers/media/dvb/bt8xx/dst_common.h 2006-08-02 08:41:25.000000000 +0400@@ -147,6 +147,7 @@ struct dst_state { struct semaphore dst_mutex; #endif u8 fw_name[8];+ struct dvb_device *dst_ca; }; struct tuner_types {@@ -184,8 +185,8 @@ int dst_comm_init(struct dst_state* stat 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);-void dst_ca_attach(struct dst_state *state, struct dvb_adapter *dvb_adapter);+struct dst_state *dst_attach(struct dst_state* state, struct dvb_adapter *dvb_adapter);+int 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);diff -Naurp v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c v4l-dvb/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c--- v4l-dvb.orig/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c 2006-08-02 00:12:33.000000000 +0400+++ v4l-dvb/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c 2006-08-02 08:41:31.000000000 +0400@@ -670,6 +670,7 @@ static void frontend_init(struct dvb_bt8 state->config = &dst_config; state->i2c = card->i2c_adapter; state->bt = card->bt;+ state->dst_ca = NULL; /* DST is not a frontend, attaching the ASIC */ if (dvb_attach(dst_attach, state, &card->dvb_adapter) == NULL) {@@ -677,6 +678,11 @@ static void frontend_init(struct dvb_bt8 break; } card->fe = &state->frontend;+ if (state->dst_hw_cap & DST_TYPE_HAS_CA) {+ dvb_attach(dst_ca_attach, state, &card->dvb_adapter);+ if (state->dst_ca == NULL)+ dprintk("%s: dst_ca_attach: failed\n", __func__);+ } break; case BTTV_BOARD_PINNACLESAT: