fbdev: sh-mobile: Add HDMI sound type selection
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 31 Aug 2010 05:46:41 +0000 (14:46 +0900)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 1 Sep 2010 10:17:49 +0000 (11:17 +0100)
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/video/sh_mobile_hdmi.c
include/video/sh_mobile_hdmi.h

index 2fde08c..8a05c5b 100644 (file)
@@ -318,6 +318,9 @@ static void sh_hdmi_video_config(struct sh_hdmi *hdmi)
  */
 static void sh_hdmi_audio_config(struct sh_hdmi *hdmi)
 {
+       u8 data;
+       struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data;
+
        /*
         * [7:4] L/R data swap control
         * [3:0] appropriate N[19:16]
@@ -335,7 +338,23 @@ static void sh_hdmi_audio_config(struct sh_hdmi *hdmi)
         * [6:5] set required down sampling rate if required
         * [4:3] set required audio source
         */
-       hdmi_write(hdmi, 0x00, HDMI_AUDIO_SETTING_1);
+       switch (pdata->flags & HDMI_SRC_MASK) {
+       default:
+               /* FALL THROUGH */
+       case HDMI_SRC_I2S:
+               data = (0x0 << 3);
+               break;
+       case HDMI_SRC_SPDIF:
+               data = (0x1 << 3);
+               break;
+       case HDMI_SRC_DSD:
+               data = (0x2 << 3);
+               break;
+       case HDMI_SRC_HBR:
+               data = (0x3 << 3);
+               break;
+       }
+       hdmi_write(hdmi, data, HDMI_AUDIO_SETTING_1);
 
        /* [3:0] set sending channel number for channel status */
        hdmi_write(hdmi, 0x40, HDMI_AUDIO_SETTING_2);
index 577cf18..929c2d3 100644 (file)
 struct sh_mobile_lcdc_chan_cfg;
 struct device;
 
+/*
+ * flags format
+ *
+ * 0x0000000A
+ *
+ * A: Audio source select
+ */
+
+/* Audio source select */
+#define HDMI_SRC_MASK          (0xF << 0)
+#define HDMI_SRC_I2S           (0 << 0) /* default */
+#define HDMI_SRC_SPDIF         (1 << 0)
+#define HDMI_SRC_DSD           (2 << 0)
+#define HDMI_SRC_HBR           (3 << 0)
+
 struct sh_mobile_hdmi_info {
        struct sh_mobile_lcdc_chan_cfg  *lcd_chan;
        struct device                   *lcd_dev;
+       unsigned int                     flags;
 };
 
 #endif