linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] drm: bridge: adv7511: Enable SPDIF DAI
@ 2019-10-04 11:16 Bogdan Togorean
  2019-10-04 14:01 ` kbuild test robot
  0 siblings, 1 reply; 3+ messages in thread
From: Bogdan Togorean @ 2019-10-04 11:16 UTC (permalink / raw)
  To: dri-devel
  Cc: airlied, daniel, narmstrong, a.hajda, Laurent.pinchart, jonas,
	jernej.skrabec, allison, tglx, rfontana, linux-kernel,
	Bogdan Togorean

ADV7511 support I2S or SPDIF as audio input interfaces. This commit
enable support for SPDIF.

Signed-off-by: Bogdan Togorean <bogdan.togorean@analog.com>
---
 drivers/gpu/drm/bridge/adv7511/adv7511_audio.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
index a428185be2c1..96be7b005c50 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
@@ -119,6 +119,8 @@ int adv7511_hdmi_hw_params(struct device *dev, void *data,
 		audio_source = ADV7511_AUDIO_SOURCE_I2S;
 		i2s_format = ADV7511_I2S_FORMAT_LEFT_J;
 		break;
+	case HDMI_SPDIF:
+		audio_source = ADV7511_AUDIO_SOURCE_SPDIF;
 	default:
 		return -EINVAL;
 	}
@@ -175,11 +177,21 @@ static int audio_startup(struct device *dev, void *data)
 	/* use Audio infoframe updated info */
 	regmap_update_bits(adv7511->regmap, ADV7511_REG_GC(1),
 				BIT(5), 0);
+	/* enable SPDIF receiver */
+	if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
+		regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
+				   BIT(7), BIT(7));
+
 	return 0;
 }
 
 static void audio_shutdown(struct device *dev, void *data)
 {
+	struct adv7511 *adv7511 = dev_get_drvdata(dev);
+
+	if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
+		regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
+				   BIT(7), 0);
 }
 
 static int adv7511_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
@@ -213,6 +225,7 @@ static const struct hdmi_codec_pdata codec_data = {
 	.ops = &adv7511_codec_ops,
 	.max_i2s_channels = 2,
 	.i2s = 1,
+	.spdif = 1,
 };
 
 int adv7511_audio_init(struct device *dev, struct adv7511 *adv7511)
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] drm: bridge: adv7511: Enable SPDIF DAI
  2019-10-04 11:16 [PATCH 1/2] drm: bridge: adv7511: Enable SPDIF DAI Bogdan Togorean
@ 2019-10-04 14:01 ` kbuild test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kbuild test robot @ 2019-10-04 14:01 UTC (permalink / raw)
  To: Bogdan Togorean
  Cc: kbuild-all, dri-devel, airlied, daniel, narmstrong, a.hajda,
	Laurent.pinchart, jonas, jernej.skrabec, allison, tglx, rfontana,
	linux-kernel, Bogdan Togorean

[-- Attachment #1: Type: text/plain, Size: 4460 bytes --]

Hi Bogdan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[cannot apply to v5.4-rc1 next-20191004]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Bogdan-Togorean/drm-bridge-adv7511-Enable-SPDIF-DAI/20191004-205455
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 7.4.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.4.0 make.cross ARCH=xtensa 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/bridge/adv7511/adv7511_audio.c: In function 'adv7511_hdmi_hw_params':
>> drivers/gpu/drm/bridge/adv7511/adv7511_audio.c:123:16: warning: this statement may fall through [-Wimplicit-fallthrough=]
      audio_source = ADV7511_AUDIO_SOURCE_SPDIF;
   drivers/gpu/drm/bridge/adv7511/adv7511_audio.c:124:2: note: here
     default:
     ^~~~~~~

vim +123 drivers/gpu/drm/bridge/adv7511/adv7511_audio.c

    55	
    56	int adv7511_hdmi_hw_params(struct device *dev, void *data,
    57				   struct hdmi_codec_daifmt *fmt,
    58				   struct hdmi_codec_params *hparms)
    59	{
    60		struct adv7511 *adv7511 = dev_get_drvdata(dev);
    61		unsigned int audio_source, i2s_format = 0;
    62		unsigned int invert_clock;
    63		unsigned int rate;
    64		unsigned int len;
    65	
    66		switch (hparms->sample_rate) {
    67		case 32000:
    68			rate = ADV7511_SAMPLE_FREQ_32000;
    69			break;
    70		case 44100:
    71			rate = ADV7511_SAMPLE_FREQ_44100;
    72			break;
    73		case 48000:
    74			rate = ADV7511_SAMPLE_FREQ_48000;
    75			break;
    76		case 88200:
    77			rate = ADV7511_SAMPLE_FREQ_88200;
    78			break;
    79		case 96000:
    80			rate = ADV7511_SAMPLE_FREQ_96000;
    81			break;
    82		case 176400:
    83			rate = ADV7511_SAMPLE_FREQ_176400;
    84			break;
    85		case 192000:
    86			rate = ADV7511_SAMPLE_FREQ_192000;
    87			break;
    88		default:
    89			return -EINVAL;
    90		}
    91	
    92		switch (hparms->sample_width) {
    93		case 16:
    94			len = ADV7511_I2S_SAMPLE_LEN_16;
    95			break;
    96		case 18:
    97			len = ADV7511_I2S_SAMPLE_LEN_18;
    98			break;
    99		case 20:
   100			len = ADV7511_I2S_SAMPLE_LEN_20;
   101			break;
   102		case 24:
   103			len = ADV7511_I2S_SAMPLE_LEN_24;
   104			break;
   105		default:
   106			return -EINVAL;
   107		}
   108	
   109		switch (fmt->fmt) {
   110		case HDMI_I2S:
   111			audio_source = ADV7511_AUDIO_SOURCE_I2S;
   112			i2s_format = ADV7511_I2S_FORMAT_I2S;
   113			break;
   114		case HDMI_RIGHT_J:
   115			audio_source = ADV7511_AUDIO_SOURCE_I2S;
   116			i2s_format = ADV7511_I2S_FORMAT_RIGHT_J;
   117			break;
   118		case HDMI_LEFT_J:
   119			audio_source = ADV7511_AUDIO_SOURCE_I2S;
   120			i2s_format = ADV7511_I2S_FORMAT_LEFT_J;
   121			break;
   122		case HDMI_SPDIF:
 > 123			audio_source = ADV7511_AUDIO_SOURCE_SPDIF;
   124		default:
   125			return -EINVAL;
   126		}
   127	
   128		invert_clock = fmt->bit_clk_inv;
   129	
   130		regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_SOURCE, 0x70,
   131				   audio_source << 4);
   132		regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG, BIT(6),
   133				   invert_clock << 6);
   134		regmap_update_bits(adv7511->regmap, ADV7511_REG_I2S_CONFIG, 0x03,
   135				   i2s_format);
   136	
   137		adv7511->audio_source = audio_source;
   138	
   139		adv7511->f_audio = hparms->sample_rate;
   140	
   141		adv7511_update_cts_n(adv7511);
   142	
   143		regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CFG3,
   144				   ADV7511_AUDIO_CFG3_LEN_MASK, len);
   145		regmap_update_bits(adv7511->regmap, ADV7511_REG_I2C_FREQ_ID_CFG,
   146				   ADV7511_I2C_FREQ_ID_CFG_RATE_MASK, rate << 4);
   147		regmap_write(adv7511->regmap, 0x73, 0x1);
   148	
   149		return 0;
   150	}
   151	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 59595 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/2] drm: bridge: adv7511: Enable SPDIF DAI
@ 2020-03-24 12:49 Bogdan Togorean
  0 siblings, 0 replies; 3+ messages in thread
From: Bogdan Togorean @ 2020-03-24 12:49 UTC (permalink / raw)
  To: dri-devel
  Cc: Bogdan Togorean, Andrzej Hajda, Neil Armstrong, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, David Airlie, Daniel Vetter,
	Thomas Gleixner, Greg Kroah-Hartman, Steve Winslow, linux-kernel

From: Bogdan Togorean <bogdan.togorean@analog.com>

ADV7511 support I2S or SPDIF as audio input interfaces. This commit
enable support for SPDIF.

Signed-off-by: Bogdan Togorean <bogdan.togorean@analog.com>
Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
---
 drivers/gpu/drm/bridge/adv7511/adv7511_audio.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
index a428185be2c1..1e9b128d229b 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
@@ -119,6 +119,9 @@ int adv7511_hdmi_hw_params(struct device *dev, void *data,
 		audio_source = ADV7511_AUDIO_SOURCE_I2S;
 		i2s_format = ADV7511_I2S_FORMAT_LEFT_J;
 		break;
+	case HDMI_SPDIF:
+		audio_source = ADV7511_AUDIO_SOURCE_SPDIF;
+		break;
 	default:
 		return -EINVAL;
 	}
@@ -175,11 +178,21 @@ static int audio_startup(struct device *dev, void *data)
 	/* use Audio infoframe updated info */
 	regmap_update_bits(adv7511->regmap, ADV7511_REG_GC(1),
 				BIT(5), 0);
+	/* enable SPDIF receiver */
+	if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
+		regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
+				   BIT(7), BIT(7));
+
 	return 0;
 }
 
 static void audio_shutdown(struct device *dev, void *data)
 {
+	struct adv7511 *adv7511 = dev_get_drvdata(dev);
+
+	if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
+		regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
+				   BIT(7), 0);
 }
 
 static int adv7511_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
@@ -213,6 +226,7 @@ static const struct hdmi_codec_pdata codec_data = {
 	.ops = &adv7511_codec_ops,
 	.max_i2s_channels = 2,
 	.i2s = 1,
+	.spdif = 1,
 };
 
 int adv7511_audio_init(struct device *dev, struct adv7511 *adv7511)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-03-24 12:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-04 11:16 [PATCH 1/2] drm: bridge: adv7511: Enable SPDIF DAI Bogdan Togorean
2019-10-04 14:01 ` kbuild test robot
2020-03-24 12:49 Bogdan Togorean

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).