/* The camera could have been already on, try to reset */
                if (sdesc->subdev_desc.reset)
-                       sdesc->subdev_desc.reset(icd->pdev);
+                       if (icd->control)
+                               sdesc->subdev_desc.reset(icd->control);
 
                ret = soc_camera_add_device(icd);
                if (ret < 0) {
 
                        /* The camera could have been already on, try to reset */
                        if (ssdd->reset)
-                               ssdd->reset(icd->pdev);
+                               if (icd->control)
+                                       ssdd->reset(icd->control);
 
                        icd->parent = ici->v4l2_dev.dev;
 
                                memcpy(&sdesc->subdev_desc, ssdd,
                                       sizeof(sdesc->subdev_desc));
                                if (ssdd->reset)
-                                       ssdd->reset(icd->pdev);
+                                       ssdd->reset(&client->dev);
                        }
 
                        icd->control = &client->dev;