vsc_tp_event_cb_t event_notify;
        void *event_notify_context;
-
-       /* used to protect command download */
-       struct mutex mutex;
+       struct mutex event_notify_mutex;        /* protects event_notify + context */
+       struct mutex mutex;                     /* protects command download */
 };
 
 /* GPIO resources */
 {
        struct vsc_tp *tp = data;
 
+       guard(mutex)(&tp->event_notify_mutex);
+
        if (tp->event_notify)
                tp->event_notify(tp->event_notify_context);
 
 int vsc_tp_register_event_cb(struct vsc_tp *tp, vsc_tp_event_cb_t event_cb,
                            void *context)
 {
+       guard(mutex)(&tp->event_notify_mutex);
+
        tp->event_notify = event_cb;
        tp->event_notify_context = context;
 
                return ret;
 
        mutex_init(&tp->mutex);
+       mutex_init(&tp->event_notify_mutex);
 
        /* only one child acpi device */
        ret = acpi_dev_for_each_child(ACPI_COMPANION(dev),
 err_destroy_lock:
        free_irq(spi->irq, tp);
 
+       mutex_destroy(&tp->event_notify_mutex);
        mutex_destroy(&tp->mutex);
 
        return ret;
 
        free_irq(spi->irq, tp);
 
+       mutex_destroy(&tp->event_notify_mutex);
        mutex_destroy(&tp->mutex);
 }