struct ad9389b_state_edid edid;
        /* Running counter of the number of detected EDIDs (for debugging) */
        unsigned edid_detect_counter;
-       struct workqueue_struct *work_queue;
        struct delayed_work edid_handler; /* work entry */
 };
 
                        v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
                        ad9389b_s_power(sd, false);
                        ad9389b_s_power(sd, true);
-                       queue_delayed_work(state->work_queue,
-                                          &state->edid_handler, EDID_DELAY);
+                       schedule_delayed_work(&state->edid_handler, EDID_DELAY);
                        return;
                }
        }
                ad9389b_setup(sd);
                ad9389b_notify_monitor_detect(sd);
                state->edid.read_retries = EDID_MAX_RETRIES;
-               queue_delayed_work(state->work_queue,
-                                  &state->edid_handler, EDID_DELAY);
+               schedule_delayed_work(&state->edid_handler, EDID_DELAY);
        } else if (!(status & MASK_AD9389B_HPD_DETECT)) {
                v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
                state->have_monitor = false;
                ad9389b_wr(sd, 0xc9, 0xf);
                ad9389b_wr(sd, 0xc4, state->edid.segments);
                state->edid.read_retries = EDID_MAX_RETRIES;
-               queue_delayed_work(state->work_queue,
-                                  &state->edid_handler, EDID_DELAY);
+               schedule_delayed_work(&state->edid_handler, EDID_DELAY);
                return false;
        }
 
                goto err_entity;
        }
 
-       state->work_queue = create_singlethread_workqueue(sd->name);
-       if (state->work_queue == NULL) {
-               v4l2_err(sd, "could not create workqueue\n");
-               err = -ENOMEM;
-               goto err_unreg;
-       }
-
        INIT_DELAYED_WORK(&state->edid_handler, ad9389b_edid_handler);
        state->dv_timings = dv1080p60;
 
                  client->addr << 1, client->adapter->name);
        return 0;
 
-err_unreg:
-       i2c_unregister_device(state->edid_i2c_client);
 err_entity:
        media_entity_cleanup(&sd->entity);
 err_hdl:
        ad9389b_s_stream(sd, false);
        ad9389b_s_audio_stream(sd, false);
        ad9389b_init_setup(sd);
-       cancel_delayed_work(&state->edid_handler);
+       cancel_delayed_work_sync(&state->edid_handler);
        i2c_unregister_device(state->edid_i2c_client);
-       destroy_workqueue(state->work_queue);
        v4l2_device_unregister_subdev(sd);
        media_entity_cleanup(&sd->entity);
        v4l2_ctrl_handler_free(sd->ctrl_handler);