mutex_lock(&cs->mutex);
 
-       if (!cs->open_count)
+       if (!cs->connected)
+               gig_dbg(DEBUG_IF, "not connected");     /* nothing to do */
+       else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else {
                if (!--cs->open_count) {
        if (mutex_lock_interruptible(&cs->mutex))
                return -ERESTARTSYS; // FIXME -EINTR?
 
-       if (!cs->open_count)
+       if (!cs->connected) {
+               gig_dbg(DEBUG_IF, "not connected");
+               retval = -ENODEV;
+       } else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else {
                retval = 0;
                                retval = put_user(int_arg, (int __user *) arg);
                        break;
                case GIGASET_BRKCHARS:
-                       //FIXME test if MS_LOCKED
-                       if (!cs->connected) {
-                               gig_dbg(DEBUG_ANY,
-                                   "can't communicate with unplugged device");
-                               retval = -ENODEV;
-                               break;
-                       }
                        retval = copy_from_user(&buf,
                                        (const unsigned char __user *) arg, 6)
                                ? -EFAULT : 0;
                return -ERESTARTSYS; // FIXME -EINTR?
 
        if (!cs->connected) {
-               gig_dbg(DEBUG_ANY, "can't communicate with unplugged device");
+               gig_dbg(DEBUG_IF, "not connected");
                retval = -ENODEV;
        } else {
                mc = (cs->control_state | set) & ~clear & (TIOCM_RTS|TIOCM_DTR);
        if (mutex_lock_interruptible(&cs->mutex))
                return -ERESTARTSYS; // FIXME -EINTR?
 
-       if (!cs->open_count)
+       if (!cs->connected) {
+               gig_dbg(DEBUG_IF, "not connected");
+               retval = -ENODEV;
+       } else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else if (cs->mstate != MS_LOCKED) {
                dev_warn(cs->dev, "can't write to unlocked device\n");
                retval = -EBUSY;
-       } else if (!cs->connected) {
-               gig_dbg(DEBUG_ANY, "can't write to unplugged device");
-               retval = -EBUSY; //FIXME
        } else {
                retval = cs->ops->write_cmd(cs, buf, count,
                                            &cs->if_wake_tasklet);
        if (mutex_lock_interruptible(&cs->mutex))
                return -ERESTARTSYS; // FIXME -EINTR?
 
-       if (!cs->open_count)
+       if (!cs->connected) {
+               gig_dbg(DEBUG_IF, "not connected");
+               retval = -ENODEV;
+       } else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else if (cs->mstate != MS_LOCKED) {
                dev_warn(cs->dev, "can't write to unlocked device\n");
                retval = -EBUSY;
-       } else if (!cs->connected) {
-               gig_dbg(DEBUG_ANY, "can't write to unplugged device");
-               retval = -EBUSY; //FIXME
        } else
                retval = cs->ops->write_room(cs);
 
        if (mutex_lock_interruptible(&cs->mutex))
                return -ERESTARTSYS; // FIXME -EINTR?
 
-       if (!cs->open_count)
+       if (!cs->connected) {
+               gig_dbg(DEBUG_IF, "not connected");
+               retval = -ENODEV;
+       } else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else if (cs->mstate != MS_LOCKED) {
                dev_warn(cs->dev, "can't write to unlocked device\n");
                retval = -EBUSY;
-       } else if (!cs->connected) {
-               gig_dbg(DEBUG_ANY, "can't write to unplugged device");
-               retval = -EBUSY; //FIXME
        } else
                retval = cs->ops->chars_in_buffer(cs);
 
 
        mutex_lock(&cs->mutex);
 
-       if (!cs->open_count)
+       if (!cs->connected)
+               gig_dbg(DEBUG_IF, "not connected");     /* nothing to do */
+       else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else {
                //FIXME
 
        mutex_lock(&cs->mutex);
 
-       if (!cs->open_count)
+       if (!cs->connected)
+               gig_dbg(DEBUG_IF, "not connected");     /* nothing to do */
+       else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else {
                //FIXME
 
        mutex_lock(&cs->mutex);
 
-       if (!cs->open_count) {
-               dev_warn(cs->dev, "%s: device not opened\n", __func__);
+       if (!cs->connected) {
+               gig_dbg(DEBUG_IF, "not connected");
                goto out;
        }
 
-       if (!cs->connected) {
-               gig_dbg(DEBUG_ANY, "can't communicate with unplugged device");
+       if (!cs->open_count) {
+               dev_warn(cs->dev, "%s: device not opened\n", __func__);
                goto out;
        }