ASoC: rockchip: add bindings for spdif controller
[firefly-linux-kernel-4.4.55.git] / sound / soc / rockchip / rockchip_spdif.c
index ac72ff5055bbce626550c4fd277a96c351321b25..c589f6f03e70d512da33fb3a7b93da5eded2ae0b 100644 (file)
@@ -28,6 +28,7 @@ enum rk_spdif_type {
        RK_SPDIF_RK3066,
        RK_SPDIF_RK3188,
        RK_SPDIF_RK3288,
+       RK_SPDIF_RK3366,
 };
 
 #define RK3288_GRF_SOC_CON2 0x24c
@@ -45,11 +46,17 @@ struct rk_spdif_dev {
 
 static const struct of_device_id rk_spdif_match[] = {
        { .compatible = "rockchip,rk3066-spdif",
-         .data = (void *) RK_SPDIF_RK3066 },
+         .data = (void *)RK_SPDIF_RK3066 },
        { .compatible = "rockchip,rk3188-spdif",
-         .data = (void *) RK_SPDIF_RK3188 },
+         .data = (void *)RK_SPDIF_RK3188 },
        { .compatible = "rockchip,rk3288-spdif",
-         .data = (void *) RK_SPDIF_RK3288 },
+         .data = (void *)RK_SPDIF_RK3288 },
+       { .compatible = "rockchip,rk3366-spdif",
+         .data = (void *)RK_SPDIF_RK3366 },
+       { .compatible = "rockchip,rk3368-spdif",
+         .data = (void *)RK_SPDIF_RK3366 },
+       { .compatible = "rockchip,rk3399-spdif",
+         .data = (void *)RK_SPDIF_RK3366 },
        {},
 };
 MODULE_DEVICE_TABLE(of, rk_spdif_match);
@@ -152,8 +159,10 @@ static int rk_spdif_trigger(struct snd_pcm_substream *substream,
        case SNDRV_PCM_TRIGGER_RESUME:
        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
                ret = regmap_update_bits(spdif->regmap, SPDIF_DMACR,
-                                  SPDIF_DMACR_TDE_ENABLE,
-                                  SPDIF_DMACR_TDE_ENABLE);
+                                  SPDIF_DMACR_TDE_ENABLE |
+                                  SPDIF_DMACR_TDL_MASK,
+                                  SPDIF_DMACR_TDE_ENABLE |
+                                  SPDIF_DMACR_TDL(16));
 
                if (ret != 0)
                        return ret;