};
 
 struct aspeed_lpc_snoop_channel {
+       bool enabled;
        struct kfifo            fifo;
        wait_queue_head_t       wq;
        struct miscdevice       miscdev;
        const struct aspeed_lpc_snoop_model_data *model_data =
                of_device_get_match_data(dev);
 
+       if (WARN_ON(lpc_snoop->chan[channel].enabled))
+               return -EBUSY;
+
        init_waitqueue_head(&lpc_snoop->chan[channel].wq);
        /* Create FIFO datastructure */
        rc = kfifo_alloc(&lpc_snoop->chan[channel].fifo,
                regmap_update_bits(lpc_snoop->regmap, HICRB,
                                hicrb_en, hicrb_en);
 
+       lpc_snoop->chan[channel].enabled = true;
+
        return 0;
 
 err_misc_deregister:
 static void aspeed_lpc_disable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
                                     int channel)
 {
+       if (!lpc_snoop->chan[channel].enabled)
+               return;
+
        switch (channel) {
        case 0:
                regmap_update_bits(lpc_snoop->regmap, HICR5,
                return;
        }
 
+       lpc_snoop->chan[channel].enabled = false;
+       /* Consider improving safety wrt concurrent reader(s) */
        misc_deregister(&lpc_snoop->chan[channel].miscdev);
        kfifo_free(&lpc_snoop->chan[channel].fifo);
 }