return ret;
 }
 
-int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
+static int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
 {
        struct af9033_state *state = fe->demodulator_priv;
        int ret;
 
        return ret;
 }
-EXPORT_SYMBOL(af9033_pid_filter_ctrl);
 
-int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid, int onoff)
+static int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid, int onoff)
 {
        struct af9033_state *state = fe->demodulator_priv;
        int ret;
 
        return ret;
 }
-EXPORT_SYMBOL(af9033_pid_filter);
 
 static struct dvb_frontend_ops af9033_ops;
 
 struct dvb_frontend *af9033_attach(const struct af9033_config *config,
-               struct i2c_adapter *i2c)
+                                  struct i2c_adapter *i2c,
+                                  struct af9033_ops *ops)
 {
        int ret;
        struct af9033_state *state;
        memcpy(&state->fe.ops, &af9033_ops, sizeof(struct dvb_frontend_ops));
        state->fe.demodulator_priv = state;
 
+       if (ops) {
+               ops->pid_filter = af9033_pid_filter;
+               ops->pid_filter_ctrl = af9033_pid_filter_ctrl;
+       }
+
        return &state->fe;
 
 err:
 
 };
 
 
-#if IS_ENABLED(CONFIG_DVB_AF9033)
-extern struct dvb_frontend *af9033_attach(const struct af9033_config *config,
-       struct i2c_adapter *i2c);
+struct af9033_ops {
+       int (*pid_filter_ctrl)(struct dvb_frontend *fe, int onoff);
+       int (*pid_filter)(struct dvb_frontend *fe, int index, u16 pid,
+                         int onoff);
+};
 
-extern int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff);
 
-extern int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid,
-       int onoff);
+#if IS_ENABLED(CONFIG_DVB_AF9033)
+extern
+struct dvb_frontend *af9033_attach(const struct af9033_config *config,
+                                  struct i2c_adapter *i2c,
+                                  struct af9033_ops *ops);
+
 #else
-static inline struct dvb_frontend *af9033_attach(
-       const struct af9033_config *config, struct i2c_adapter *i2c)
+static inline
+struct dvb_frontend *af9033_attach(const struct af9033_config *config,
+                                  struct i2c_adapter *i2c,
+                                  struct af9033_ops *ops)
 {
        pr_warn("%s: driver disabled by Kconfig\n", __func__);
        return NULL;
 
 
        /* attach demodulator */
        adap->fe[0] = dvb_attach(af9033_attach, &state->af9033_config[adap->id],
-                       &d->i2c_adap);
+                       &d->i2c_adap, &state->ops);
        if (adap->fe[0] == NULL) {
                ret = -ENODEV;
                goto err;
 
 static int af9035_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
 {
-       return af9033_pid_filter_ctrl(adap->fe[0], onoff);
+       struct state *state = adap_to_priv(adap);
+
+       return state->ops.pid_filter_ctrl(adap->fe[0], onoff);
 }
 
 static int af9035_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
                int onoff)
 {
-       return af9033_pid_filter(adap->fe[0], index, pid, onoff);
+       struct state *state = adap_to_priv(adap);
+
+       return state->ops.pid_filter(adap->fe[0], index, pid, onoff);
 }
 
 static int af9035_probe(struct usb_interface *intf,
 
        u8 dual_mode:1;
        u16 eeprom_addr;
        struct af9033_config af9033_config[2];
+
+       struct af9033_ops ops;
 };
 
 static const u32 clock_lut_af9035[] = {