From mboxrd@z Thu Jan 1 00:00:00 1970 From: shawnguo@kernel.org (Shawn Guo) Date: Thu, 29 Dec 2016 19:12:32 +0800 Subject: [PATCH] drm: zte: support hdmi audio through spdif In-Reply-To: References: <1482412319-6304-1-git-send-email-shawnguo@kernel.org> Message-ID: <20161229111230.GA6177@dragon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Thu, Dec 22, 2016 at 10:18:00AM -0500, Sean Paul wrote: > On Thu, Dec 22, 2016 at 8:11 AM, Shawn Guo wrote: > > +static int zx_hdmi_audio_get_n(unsigned int fs) > > +{ > > + unsigned int n; > > + > > + switch (fs) { > > + case 32000: > > + n = 4096; > > + break; > > + case 44100: > > + n = 6272; > > + break; > > + case 48000: > > + n = 6144; > > + break; > > + case 88200: > > + n = 6272 * 2; > > + break; > > + case 96000: > > + n = 6144 * 2; > > + break; > > + case 176400: > > + n = 6272 * 4; > > + break; > > + case 192000: > > + n = 6144 * 4; > > + break; > > + default: > > + n = fs * 128 / 1000; > > It seems like this could be distilled down to: > > if (fs && (fs % 44100) == 0) > n = 6272 * (fs / 44100); > else > n = fs * 128 / 1000; Nice! Thanks for the suggestion. > > > + } > > + > > + return n; > > +} > > + > > +static int zx_hdmi_audio_hw_params(struct device *dev, > > + void *data, > > + struct hdmi_codec_daifmt *daifmt, > > + struct hdmi_codec_params *params) > > +{ > > + struct zx_hdmi *hdmi = dev_get_drvdata(dev); > > + struct hdmi_audio_infoframe *cea = ¶ms->cea; > > + union hdmi_infoframe frame; > > + int n; > > + > > + /* We only support spdif for now */ > > + if (daifmt->fmt != HDMI_SPDIF) { > > + DRM_DEV_ERROR(hdmi->dev, "invalid daifmt %d\n", daifmt->fmt); > > + return -EINVAL; > > + } > > + > > + switch (params->sample_width) { > > + case 16: > > + hdmi_writeb_mask(hdmi, TPI_AUD_CONFIG, SPDIF_SAMPLE_SIZE_MASK, > > + SPDIF_SAMPLE_SIZE_16BIT); > > + break; > > + case 20: > > + hdmi_writeb_mask(hdmi, TPI_AUD_CONFIG, SPDIF_SAMPLE_SIZE_MASK, > > + SPDIF_SAMPLE_SIZE_20BIT); > > + break; > > + case 24: > > + hdmi_writeb_mask(hdmi, TPI_AUD_CONFIG, SPDIF_SAMPLE_SIZE_MASK, > > + SPDIF_SAMPLE_SIZE_24BIT); > > + break; > > + default: > > + DRM_DEV_ERROR(hdmi->dev, "invalid sample width %d\n", > > + params->sample_width); > > + return -EINVAL; > > + } > > + > > + /* CTS is calculated by hardware, and we only need to take care of N */ > > + n = zx_hdmi_audio_get_n(params->sample_rate); > > + hdmi_writeb(hdmi, N_SVAL1, n & 0xff); > > + hdmi_writeb(hdmi, N_SVAL2, (n >> 8) && 0xff); > > s/&&/&/ ? Oops! Thanks for catching it. Shawn > > > + hdmi_writeb(hdmi, N_SVAL3, (n >> 16) & 0xf); > > + > > + /* Enable spdif mode */ > > + hdmi_writeb_mask(hdmi, AUD_MODE, SPDIF_EN, SPDIF_EN); > > + > > + /* Enable audio input */ > > + hdmi_writeb_mask(hdmi, AUD_EN, AUD_IN_EN, AUD_IN_EN); > > + > > + memcpy(&frame.audio, cea, sizeof(*cea)); > > + > > + return zx_hdmi_infoframe_trans(hdmi, &frame, FSEL_AUDIO); > > +} From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shawn Guo Subject: Re: [PATCH] drm: zte: support hdmi audio through spdif Date: Thu, 29 Dec 2016 19:12:32 +0800 Message-ID: <20161229111230.GA6177@dragon> References: <1482412319-6304-1-git-send-email-shawnguo@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id C63406E09D for ; Thu, 29 Dec 2016 11:12:41 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul Cc: Daniel Vetter , Baoyou Xie , dri-devel , Jun Nie , Linux ARM Kernel List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBEZWMgMjIsIDIwMTYgYXQgMTA6MTg6MDBBTSAtMDUwMCwgU2VhbiBQYXVsIHdyb3Rl Ogo+IE9uIFRodSwgRGVjIDIyLCAyMDE2IGF0IDg6MTEgQU0sIFNoYXduIEd1byA8c2hhd25ndW9A a2VybmVsLm9yZz4gd3JvdGU6Cj4gPiArc3RhdGljIGludCB6eF9oZG1pX2F1ZGlvX2dldF9uKHVu c2lnbmVkIGludCBmcykKPiA+ICt7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBuOwo+ID4gKwo+ ID4gKyAgICAgICBzd2l0Y2ggKGZzKSB7Cj4gPiArICAgICAgIGNhc2UgMzIwMDA6Cj4gPiArICAg ICAgICAgICAgICAgbiA9IDQwOTY7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg ICAgIGNhc2UgNDQxMDA6Cj4gPiArICAgICAgICAgICAgICAgbiA9IDYyNzI7Cj4gPiArICAgICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2UgNDgwMDA6Cj4gPiArICAgICAgICAgICAg ICAgbiA9IDYxNDQ7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2Ug ODgyMDA6Cj4gPiArICAgICAgICAgICAgICAgbiA9IDYyNzIgKiAyOwo+ID4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+ID4gKyAgICAgICBjYXNlIDk2MDAwOgo+ID4gKyAgICAgICAgICAgICAgIG4g PSA2MTQ0ICogMjsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSAx NzY0MDA6Cj4gPiArICAgICAgICAgICAgICAgbiA9IDYyNzIgKiA0Owo+ID4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+ID4gKyAgICAgICBjYXNlIDE5MjAwMDoKPiA+ICsgICAgICAgICAgICAgICBu ID0gNjE0NCAqIDQ7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGRlZmF1 bHQ6Cj4gPiArICAgICAgICAgICAgICAgbiA9IGZzICogMTI4IC8gMTAwMDsKPiAKPiBJdCBzZWVt cyBsaWtlIHRoaXMgY291bGQgYmUgZGlzdGlsbGVkIGRvd24gdG86Cj4gCj4gaWYgKGZzICYmIChm cyAlIDQ0MTAwKSA9PSAwKQo+ICAgICAgICAgbiA9IDYyNzIgKiAoZnMgLyA0NDEwMCk7Cj4gZWxz ZQo+ICAgICAgICAgbiA9IGZzICogMTI4IC8gMTAwMDsKCk5pY2UhICBUaGFua3MgZm9yIHRoZSBz dWdnZXN0aW9uLgoKPiAKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gbjsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB6eF9oZG1pX2F1ZGlvX2h3X3BhcmFtcyhzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKmRhdGEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBo ZG1pX2NvZGVjX2RhaWZtdCAqZGFpZm10LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMgKnBhcmFtcykKPiA+ICt7Cj4gPiArICAg ICAgIHN0cnVjdCB6eF9oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArICAg ICAgIHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqY2VhID0gJnBhcmFtcy0+Y2VhOwo+ID4g KyAgICAgICB1bmlvbiBoZG1pX2luZm9mcmFtZSBmcmFtZTsKPiA+ICsgICAgICAgaW50IG47Cj4g PiArCj4gPiArICAgICAgIC8qIFdlIG9ubHkgc3VwcG9ydCBzcGRpZiBmb3Igbm93ICovCj4gPiAr ICAgICAgIGlmIChkYWlmbXQtPmZtdCAhPSBIRE1JX1NQRElGKSB7Cj4gPiArICAgICAgICAgICAg ICAgRFJNX0RFVl9FUlJPUihoZG1pLT5kZXYsICJpbnZhbGlkIGRhaWZtdCAlZFxuIiwgZGFpZm10 LT5mbXQpOwo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKyAgICAgICB9 Cj4gPiArCj4gPiArICAgICAgIHN3aXRjaCAocGFyYW1zLT5zYW1wbGVfd2lkdGgpIHsKPiA+ICsg ICAgICAgY2FzZSAxNjoKPiA+ICsgICAgICAgICAgICAgICBoZG1pX3dyaXRlYl9tYXNrKGhkbWks IFRQSV9BVURfQ09ORklHLCBTUERJRl9TQU1QTEVfU0laRV9NQVNLLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU1BESUZfU0FNUExFX1NJWkVfMTZCSVQpOwo+ID4gKyAgICAg ICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICBjYXNlIDIwOgo+ID4gKyAgICAgICAgICAgICAg IGhkbWlfd3JpdGViX21hc2soaGRtaSwgVFBJX0FVRF9DT05GSUcsIFNQRElGX1NBTVBMRV9TSVpF X01BU0ssCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUERJRl9TQU1QTEVf U0laRV8yMEJJVCk7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2Ug MjQ6Cj4gPiArICAgICAgICAgICAgICAgaGRtaV93cml0ZWJfbWFzayhoZG1pLCBUUElfQVVEX0NP TkZJRywgU1BESUZfU0FNUExFX1NJWkVfTUFTSywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNQRElGX1NBTVBMRV9TSVpFXzI0QklUKTsKPiA+ICsgICAgICAgICAgICAgICBi cmVhazsKPiA+ICsgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgICBEUk1fREVWX0VS Uk9SKGhkbWktPmRldiwgImludmFsaWQgc2FtcGxlIHdpZHRoICVkXG4iLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5zYW1wbGVfd2lkdGgpOwo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIC8q IENUUyBpcyBjYWxjdWxhdGVkIGJ5IGhhcmR3YXJlLCBhbmQgd2Ugb25seSBuZWVkIHRvIHRha2Ug Y2FyZSBvZiBOICovCj4gPiArICAgICAgIG4gPSB6eF9oZG1pX2F1ZGlvX2dldF9uKHBhcmFtcy0+ c2FtcGxlX3JhdGUpOwo+ID4gKyAgICAgICBoZG1pX3dyaXRlYihoZG1pLCBOX1NWQUwxLCBuICYg MHhmZik7Cj4gPiArICAgICAgIGhkbWlfd3JpdGViKGhkbWksIE5fU1ZBTDIsIChuID4+IDgpICYm IDB4ZmYpOwo+IAo+IHMvJiYvJi8gPwoKT29wcyEgIFRoYW5rcyBmb3IgY2F0Y2hpbmcgaXQuCgpT aGF3bgoKPiAKPiA+ICsgICAgICAgaGRtaV93cml0ZWIoaGRtaSwgTl9TVkFMMywgKG4gPj4gMTYp ICYgMHhmKTsKPiA+ICsKPiA+ICsgICAgICAgLyogRW5hYmxlIHNwZGlmIG1vZGUgKi8KPiA+ICsg ICAgICAgaGRtaV93cml0ZWJfbWFzayhoZG1pLCBBVURfTU9ERSwgU1BESUZfRU4sIFNQRElGX0VO KTsKPiA+ICsKPiA+ICsgICAgICAgLyogRW5hYmxlIGF1ZGlvIGlucHV0ICovCj4gPiArICAgICAg IGhkbWlfd3JpdGViX21hc2soaGRtaSwgQVVEX0VOLCBBVURfSU5fRU4sIEFVRF9JTl9FTik7Cj4g PiArCj4gPiArICAgICAgIG1lbWNweSgmZnJhbWUuYXVkaW8sIGNlYSwgc2l6ZW9mKCpjZWEpKTsK PiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHp4X2hkbWlfaW5mb2ZyYW1lX3RyYW5zKGhkbWksICZm cmFtZSwgRlNFTF9BVURJTyk7Cj4gPiArfQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK