I2C_RCAR_GEN1,
        I2C_RCAR_GEN2,
        I2C_RCAR_GEN3,
+       I2C_RCAR_GEN4,
 };
 
 struct rcar_i2c_priv {
        dma_unmap_single(chan->device->dev, sg_dma_address(&priv->sg),
                         sg_dma_len(&priv->sg), priv->dma_direction);
 
-       /* Gen3 can only do one RXDMA per transfer and we just completed it */
-       if (priv->devtype == I2C_RCAR_GEN3 &&
+       /* Gen3+ can only do one RXDMA per transfer and we just completed it */
+       if (priv->devtype >= I2C_RCAR_GEN3 &&
            priv->dma_direction == DMA_FROM_DEVICE)
                priv->flags |= ID_P_NO_RXDMA;
 
        if (ret < 0)
                goto out;
 
-       /* Gen3 needs a reset before allowing RXDMA once */
-       if (priv->devtype == I2C_RCAR_GEN3) {
+       /* Gen3+ needs a reset. That also allows RXDMA once */
+       if (priv->devtype >= I2C_RCAR_GEN3) {
                priv->flags &= ~ID_P_NO_RXDMA;
                ret = rcar_i2c_do_reset(priv);
                if (ret)
        { .compatible = "renesas,rcar-gen1-i2c", .data = (void *)I2C_RCAR_GEN1 },
        { .compatible = "renesas,rcar-gen2-i2c", .data = (void *)I2C_RCAR_GEN2 },
        { .compatible = "renesas,rcar-gen3-i2c", .data = (void *)I2C_RCAR_GEN3 },
-       { .compatible = "renesas,rcar-gen4-i2c", .data = (void *)I2C_RCAR_GEN3 },
+       { .compatible = "renesas,rcar-gen4-i2c", .data = (void *)I2C_RCAR_GEN4 },
        {},
 };
 MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids);
        if (of_property_read_bool(dev->of_node, "smbus"))
                priv->flags |= ID_P_HOST_NOTIFY;
 
-       if (priv->devtype == I2C_RCAR_GEN3) {
+       if (priv->devtype >= I2C_RCAR_GEN3) {
                priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
                if (IS_ERR(priv->rstc)) {
                        ret = PTR_ERR(priv->rstc);