{
        int ret;
 
+       /* Don't reset if a slave instance is currently running */
+       if (priv->slave)
+               return -EISCONN;
+
        ret = reset_control_reset(priv->rstc);
        if (ret)
                return ret;
        if (of_property_read_bool(dev->of_node, "smbus"))
                priv->flags |= ID_P_HOST_NOTIFY;
 
+       /* R-Car Gen3+ needs a reset before every transfer */
        if (priv->devtype >= I2C_RCAR_GEN3) {
                priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
                if (IS_ERR(priv->rstc)) {
                ret = reset_control_status(priv->rstc);
                if (ret < 0)
                        goto out_pm_put;
+
+               /* hard reset disturbs HostNotify local target, so disable it */
+               priv->flags &= ~ID_P_HOST_NOTIFY;
        }
 
        ret = platform_get_irq(pdev, 0);