static int verbose;
 
 #define XIN 57840000UL
-#define DISABLE_INVERSION(reg0)                do { reg0 |= 0x20; } while (0)
-#define ENABLE_INVERSION(reg0)         do { reg0 &= ~0x20; } while (0)
-#define HAS_INVERSION(reg0)            (!(reg0 & 0x20))
 
 #define FIN (XIN >> 4)
 
        int ret;
 
        ret = i2c_transfer (state->i2c, msg, 2);
-       if (ret != 2)
+       // Don't print an error message if the id is read.
+       if (ret != 2 && reg != 0x1a)
                printk("DVB: TDA10021: %s: readreg error (ret == %i)\n",
                                __FUNCTION__, ret);
        return b1[0];
 {
        reg0 |= state->reg0 & 0x63;
 
-       if (INVERSION_ON == inversion)
-               ENABLE_INVERSION(reg0);
-       else if (INVERSION_OFF == inversion)
-               DISABLE_INVERSION(reg0);
+       if ((INVERSION_ON == inversion) ^ (state->config->invert == 0))
+               reg0 &= ~0x20;
+       else
+               reg0 |= 0x20;
 
        _tda10021_writereg (state, 0x00, reg0 & 0xfe);
        _tda10021_writereg (state, 0x00, reg0 | 0x01);
        if (qam < 0 || qam > 5)
                return -EINVAL;
 
+       if (p->inversion != INVERSION_ON && p->inversion != INVERSION_OFF)
+               return -EINVAL;
+
        //printk("tda10021: set frequency to %d qam=%d symrate=%d\n", p->frequency,qam,p->u.qam.symbol_rate);
 
        if (fe->ops.tuner_ops.set_params) {
                       -((s32)p->u.qam.symbol_rate * afc) >> 10);
        }
 
-       p->inversion = HAS_INVERSION(state->reg0) ? INVERSION_ON : INVERSION_OFF;
+       p->inversion = ((state->reg0 & 0x20) == 0x20) ^ (state->config->invert != 0) ? INVERSION_ON : INVERSION_OFF;
        p->u.qam.modulation = ((state->reg0 >> 2) & 7) + QAM_16;
 
        p->u.qam.fec_inner = FEC_NONE;
                                     u8 pwm)
 {
        struct tda10021_state* state = NULL;
+       u8 id;
 
        /* allocate memory for the internal state */
        state = kmalloc(sizeof(struct tda10021_state), GFP_KERNEL);
        state->reg0 = tda10021_inittab[0];
 
        /* check if the demod is there */
-       if ((tda10021_readreg(state, 0x1a) & 0xf0) != 0x70) goto error;
+       id = tda10021_readreg(state, 0x1a);
+       if ((id & 0xf0) != 0x70) goto error;
+
+       printk("TDA10021: i2c-addr = 0x%02x, id = 0x%02x\n",
+              state->config->demod_address, id);
 
        /* create dvb_frontend */
        memcpy(&state->frontend.ops, &tda10021_ops, sizeof(struct dvb_frontend_ops));