#include "cxd2099.h"
 
-/* comment this line to deactivate the cxd2099ar buffer mode */
-#define BUFFER_MODE 1
+static int buffermode;
+module_param(buffermode, int, 0444);
+MODULE_PARM_DESC(buffermode, "Enable use of the CXD2099AR buffer mode (default: disabled)");
 
 static int read_data(struct dvb_ca_en50221 *ca, int slot, u8 *ebuf, int ecount);
 
        return write_regm(ci, reg, val, 0xff);
 }
 
-#ifdef BUFFER_MODE
 static int write_block(struct cxd *ci, u8 adr, u8 *data, u16 n)
 {
        int status = 0;
        }
        return status;
 }
-#endif
 
 static void set_mode(struct cxd *ci, int mode)
 {
        return len;
 }
 
-#ifdef BUFFER_MODE
-
 static int write_data(struct dvb_ca_en50221 *ca, int slot, u8 *ebuf, int ecount)
 {
        struct cxd *ci = ca->data;
        mutex_unlock(&ci->lock);
        return ecount;
 }
-#endif
 
 static struct dvb_ca_en50221 en_templ = {
        .read_attribute_mem  = read_attribute_mem,
        .slot_shutdown       = slot_shutdown,
        .slot_ts_enable      = slot_ts_enable,
        .poll_slot_status    = poll_slot_status,
-#ifdef BUFFER_MODE
        .read_data           = read_data,
        .write_data          = write_data,
-#endif
-
 };
 
 struct dvb_ca_en50221 *cxd2099_attach(struct cxd2099_cfg *cfg,
        ci->en.data = ci;
        init(ci);
        dev_info(&i2c->dev, "Attached CXD2099AR at %02x\n", ci->cfg.adr);
+
+       if (!buffermode) {
+               ci->en.read_data = NULL;
+               ci->en.write_data = NULL;
+       } else {
+               dev_info(&i2c->dev, "Using CXD2099AR buffer mode");
+       }
+
        return &ci->en;
 }
 EXPORT_SYMBOL(cxd2099_attach);