From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 2/4 v2] drm/bridge: adv7511: Add Audio support. Date: Tue, 30 Aug 2016 12:21:56 +0300 Message-ID: <3891360.sBkMj3IaSD@avalon> References: <1472514096-10915-1-git-send-email-john.stultz@linaro.org> <1472514096-10915-3-git-send-email-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [IPv6:2001:4b98:dc2:45:216:3eff:febb:480d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9E5366E377 for ; Tue, 30 Aug 2016 09:21:37 +0000 (UTC) In-Reply-To: <1472514096-10915-3-git-send-email-john.stultz@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: John Stultz Cc: Guodong Xu , dri-devel@lists.freedesktop.org, lkml , Jose Abreu , Wolfram Sang , Mark Brown , Srinivas Kandagatla , Dave Long , Andy Green , Zhangfei Gao List-Id: dri-devel@lists.freedesktop.org SGkgSm9obiwKClRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgoKT24gTW9uZGF5IDI5IEF1ZyAyMDE2 IDE2OjQxOjM0IEpvaG4gU3R1bHR6IHdyb3RlOgo+IFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IHRv IEF1ZGlvIGZvciBib3RoIGFkdjc1MTEgYW5kIGFkdjc1MzMKPiBicmlkZ2UgY2hpcHMuCj4gCj4g VGhpcyBwYXRjaCB3YXMgb3JpZ2luYWxseSBmcm9tIFsxXSBieSBMYXJzLVBldGVyIENsYXVzZW4g PGxhcnNAbWV0YWZvby5kZT4KPiBhbmQgd2FzIGFkYXB0ZWQgYnkgQXJjaGl0IFRhbmVqYSA8YXJj aGl0dEBjb2RlYXVyb3JhLm9yZz4gYW5kCj4gU3Jpbml2YXMgS2FuZGFnYXRsYSA8c3Jpbml2YXMu a2FuZGFnYXRsYUBsaW5hcm8ub3JnPi4KPiAKPiBUaGVuIEkgaGVhdmlseSByZXdvcmtlZCBpdCB0 byB1c2UgdGhlIGhkbWktY29kZWMgZHJpdmVyLiBTbyBjcmVkaXQKPiB0byB0aGVtLCBidXQgYmxh bWUgdG8gbWUuCj4gCj4gWzFdCj4gaHR0cHM6Ly9naXRodWIuY29tL2FuYWxvZ2RldmljZXNpbmMv bGludXgvYmxvYi94Y29tbV96eW5xL2RyaXZlcnMvZ3B1L2RybS9pCj4gMmMvYWR2NzUxMV9hdWRp by5jCj4gCj4gQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiBDYzogQXJjaGl0 IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KPiBDYzogTGF1cmVudCBQaW5jaGFydCA8 bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+IENjOiBXb2xmcmFtIFNhbmcgPHdz YStyZW5lc2FzQHNhbmctZW5naW5lZXJpbmcuY29tPgo+IENjOiBTcmluaXZhcyBLYW5kYWdhdGxh IDxzcmluaXZhcy5rYW5kYWdhdGxhQGxpbmFyby5vcmc+Cj4gQ2M6ICJWaWxsZSBTeXJqw6Rsw6Qi IDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiBDYzogQm9yaXMgQnJlemlsbG9uIDxi b3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgo+IENjOiBBbmR5IEdyZWVuIDxhbmR5 QHdhcm1jYXQuY29tPgo+IENjOiBEYXZlIExvbmcgPGRhdmUubG9uZ0BsaW5hcm8ub3JnPgo+IENj OiBHdW9kb25nIFh1IDxndW9kb25nLnh1QGxpbmFyby5vcmc+Cj4gQ2M6IFpoYW5nZmVpIEdhbyA8 emhhbmdmZWkuZ2FvQGxpbmFyby5vcmc+Cj4gQ2M6IE1hcmsgQnJvd24gPGJyb29uaWVAa2VybmVs Lm9yZz4KPiBDYzogTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+Cj4gQ2M6IEpv c2UgQWJyZXUgPGpvYWJyZXVAc3lub3BzeXMuY29tPgo+IENjOiBkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4gU2lnbmVkLW9mZi1ieTogSm9obiBTdHVsdHogPGpvaG4uc3R1bHR6QGxp bmFyby5vcmc+Cj4gLS0tCj4gdjI6IEludGVncmF0ZWQgZmVlZGJhY2sgZnJvbSBTcmluaXZhcwo+ IAo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyAgICAgICAgIHwgICAx ICsKPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL01ha2VmaWxlICAgICAgICB8ICAg MiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvYWR2NzUxMS5oICAgICAgIHwg ICA1ICsKPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL2Fkdjc1MTFfYXVkaW8uYyB8 IDE5OSArKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2 NzUxMS9hZHY3NTExX2Rydi5jICAgfCAgIDUgKwo+ICA1IGZpbGVzIGNoYW5nZWQsIDIxMSBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2Fkdjc1MTEvYWR2NzUxMV9hdWRpby5jCj4gCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2NzUxMS9LY29uZmlnCj4gYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyBpbmRleCBkMmIwNDk5Li5lMzk3NWU5IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2NzUxMS9LY29uZmlnCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL0tjb25maWcKPiBAQCAtMyw2ICszLDcgQEAgY29uZmln IERSTV9JMkNfQURWNzUxMQo+ICAJZGVwZW5kcyBvbiBPRgo+ICAJc2VsZWN0IERSTV9LTVNfSEVM UEVSCj4gIAlzZWxlY3QgUkVHTUFQX0kyQwo+ICsJc2VsZWN0IFNORF9TT0NfSERNSV9DT0RFQyBp ZiBTTkRfU09DCgpTaG91bGRuJ3Qgc291bmQgc3VwcG9ydCBiZSBvcHRpb25hbCA/IEkgY2FuIGlt YWdpbmUgYSBib2FyZCB0aGF0IGRvZXNuJ3Qgd2lyZSAKdXAgc291bmQgdG8gdGhlIEFEVjc1MTEg YnV0IHN0aWxsIHVzZXMgU05EX1NPQyBmb3Igb3RoZXIgcHVycG9zZXMuCgo+ICAJaGVscAo+ICAJ ICBTdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZSBBRFY3NTExKFcpIGFuZCBBRFY3NTEzIEhE TUkgZW5jb2RlcnMuCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2 NzUxMS9NYWtlZmlsZQo+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL01ha2VmaWxl IGluZGV4IDkwMTkzMjcuLmFkNzI0NWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9hZHY3NTExL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3 NTExL01ha2VmaWxlCj4gQEAgLTEsMyArMSwzIEBACj4gLWFkdjc1MTEteSA6PSBhZHY3NTExX2Ry di5vCj4gK2Fkdjc1MTEteSA6PSBhZHY3NTExX2Rydi5vIGFkdjc1MTFfYXVkaW8ubwoKQ291bGQg d2UgYXZvaWQgY29tcGlsaW5nIGFkdjc1MTFfYXVkaW8ubyBpZiBzb3VuZCBzdXBwb3J0IGlzbid0 IGRlc2lyZWQgdG8gCmF2b2lkIGJsb2F0aW5nIHRoZSBrZXJuZWwgPwoKPiAgYWR2NzUxMS0kKENP TkZJR19EUk1fSTJDX0FEVjc1MzMpICs9IGFkdjc1MzMubwo+ICBvYmotJChDT05GSUdfRFJNX0ky Q19BRFY3NTExKSArPSBhZHY3NTExLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9hZHY3NTExL2Fkdjc1MTEuaAo+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTEx L2Fkdjc1MTEuaCBpbmRleCBjNzAwMmEwLi4yZTRkMzQwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYWR2NzUxMS9hZHY3NTExLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL2Fkdjc1MTEvYWR2NzUxMS5oCj4gQEAgLTIzLDYgKzIzLDggQEAgc3RydWN0IGFkdjc1 MTE7Cj4gCj4gIGludCBhZHY3NTExX3BhY2tldF9lbmFibGUoc3RydWN0IGFkdjc1MTEgKmFkdjc1 MTEsIHVuc2lnbmVkIGludCBwYWNrZXQpOwo+ICBpbnQgYWR2NzUxMV9wYWNrZXRfZGlzYWJsZShz dHJ1Y3QgYWR2NzUxMSAqYWR2NzUxMSwgdW5zaWduZWQgaW50IHBhY2tldCk7Cj4gK2ludCBhZHY3 NTExX2F1ZGlvX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsKPiArdm9pZCBhZHY3NTExX2F1ZGlv X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KTsKPiAKPiAgI2RlZmluZSBBRFY3NTExX1JFR19DSElQ X1JFVklTSU9OCQkweDAwCj4gICNkZWZpbmUgQURWNzUxMV9SRUdfTjAJCQkJMHgwMQo+IEBAIC0z MTcsNiArMzE5LDggQEAgc3RydWN0IGFkdjc1MTEgewo+ICAJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgY3Vycl9tb2RlOwo+IAo+ICAJdW5zaWduZWQgaW50IGZfdG1kczsKPiArCXVuc2lnbmVkIGlu dCBmX2F1ZGlvOwo+ICsJdW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZTsKPiAKPiAgCXVuc2lnbmVk IGludCBjdXJyZW50X2VkaWRfc2VnbWVudDsKPiAgCXVpbnQ4X3QgZWRpZF9idWZbMjU2XTsKPiBA QCAtMzQyLDYgKzM0Niw3IEBAIHN0cnVjdCBhZHY3NTExIHsKPiAgCWJvb2wgdXNlX3RpbWluZ19n ZW47Cj4gCj4gIAllbnVtIGFkdjc1MTFfdHlwZSB0eXBlOwo+ICsJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqYXVkaW9fcGRldjsKPiAgfTsKPiAKPiAgI2lmZGVmIENPTkZJR19EUk1fSTJDX0FEVjc1 MzMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL2Fkdjc1MTFf YXVkaW8uYwo+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL2Fkdjc1MTFfYXVkaW8u YyBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjBlMGVhNmIKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL2Fkdjc1MTFfYXVk aW8uYwo+IEBAIC0wLDAgKzEsMTk5IEBACj4gKy8qCj4gKyAqIEFuYWxvZyBEZXZpY2VzIEFEVjc1 MTEgSERNSSB0cmFuc21pdHRlciBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0IDIwMTIgQW5h bG9nIERldmljZXMgSW5jLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIExpbmFybyBMaW1pdGVk Cj4gKyAqCj4gKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8c291bmQvY29yZS5oPgo+ICsjaW5jbHVkZSA8c291bmQvaGRtaS1jb2RlYy5oPgo+ICsj aW5jbHVkZSA8c291bmQvcGNtLmg+Cj4gKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KPiArCj4gKyNp bmNsdWRlICJhZHY3NTExLmgiCj4gKwo+ICtzdGF0aWMgdm9pZCBhZHY3NTExX2NhbGNfY3RzX24o dW5zaWduZWQgaW50IGZfdG1kcywgdW5zaWduZWQgaW50IGZzLAo+ICsJCQkgICAgICAgdW5zaWdu ZWQgaW50ICpjdHMsIHVuc2lnbmVkIGludCAqbikKPiArewo+ICsJc3dpdGNoIChmcykgewo+ICsJ Y2FzZSAzMjAwMDoKPiArCQkqbiA9IDQwOTY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDQ0MTAwOgo+ ICsJCSpuID0gNjI3MjsKPiArCQlicmVhazsKPiArCWNhc2UgNDgwMDA6Cj4gKwkJKm4gPSA2MTQ0 Owo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCSpjdHMgPSAoKGZfdG1kcyAqICpuKSAvICgxMjgg KiBmcykpICogMTAwMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZHY3NTExX3VwZGF0ZV9jdHNf bihzdHJ1Y3QgYWR2NzUxMSAqYWR2NzUxMSkKPiArewo+ICsJdW5zaWduZWQgaW50IGN0cyA9IDA7 Cj4gKwl1bnNpZ25lZCBpbnQgbiA9IDA7Cj4gKwo+ICsJYWR2NzUxMV9jYWxjX2N0c19uKGFkdjc1 MTEtPmZfdG1kcywgYWR2NzUxMS0+Zl9hdWRpbywgJmN0cywgJm4pOwo+ICsKPiArCXJlZ21hcF93 cml0ZShhZHY3NTExLT5yZWdtYXAsIEFEVjc1MTFfUkVHX04wLCAobiA+PiAxNikgJiAweGYpOwo+ ICsJcmVnbWFwX3dyaXRlKGFkdjc1MTEtPnJlZ21hcCwgQURWNzUxMV9SRUdfTjEsIChuID4+IDgp ICYgMHhmZik7Cj4gKwlyZWdtYXBfd3JpdGUoYWR2NzUxMS0+cmVnbWFwLCBBRFY3NTExX1JFR19O MiwgbiAmIDB4ZmYpOwo+ICsKPiArCXJlZ21hcF93cml0ZShhZHY3NTExLT5yZWdtYXAsIEFEVjc1 MTFfUkVHX0NUU19NQU5VQUwwLAo+ICsJCSAgICAgKGN0cyA+PiAxNikgJiAweGYpOwo+ICsJcmVn bWFwX3dyaXRlKGFkdjc1MTEtPnJlZ21hcCwgQURWNzUxMV9SRUdfQ1RTX01BTlVBTDEsCj4gKwkJ ICAgICAoY3RzID4+IDgpICYgMHhmZik7Cj4gKwlyZWdtYXBfd3JpdGUoYWR2NzUxMS0+cmVnbWFw LCBBRFY3NTExX1JFR19DVFNfTUFOVUFMMiwKPiArCQkgICAgIGN0cyAmIDB4ZmYpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgYWR2NzUxMV9oZG1pX2h3X3BhcmFtcyhzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCQlzdHJ1Y3QgaGRtaV9jb2RlY19kYWlmbXQg KmZtdCwKPiArCQkJCXN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqaHBhcm1zKQo+ICt7Cj4gKwlz dHJ1Y3QgYWR2NzUxMSAqYWR2NzUxMSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJdW5zaWdu ZWQgaW50IGF1ZGlvX3NvdXJjZSwgaTJzX2Zvcm1hdCA9IDA7Cj4gKwl1bnNpZ25lZCBpbnQgaW52 ZXJ0X2Nsb2NrOwo+ICsJdW5zaWduZWQgaW50IHJhdGU7Cj4gKwl1bnNpZ25lZCBpbnQgbGVuOwo+ ICsKPiArCXN3aXRjaCAoaHBhcm1zLT5zYW1wbGVfcmF0ZSkgewo+ICsJY2FzZSAzMjAwMDoKPiAr CQlyYXRlID0gQURWNzUxMV9TQU1QTEVfRlJFUV8zMjAwMDsKPiArCQlicmVhazsKPiArCWNhc2Ug NDQxMDA6Cj4gKwkJcmF0ZSA9IEFEVjc1MTFfU0FNUExFX0ZSRVFfNDQxMDA7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIDQ4MDAwOgo+ICsJCXJhdGUgPSBBRFY3NTExX1NBTVBMRV9GUkVRXzQ4MDAwOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSA4ODIwMDoKPiArCQlyYXRlID0gQURWNzUxMV9TQU1QTEVfRlJF UV84ODIwMDsKPiArCQlicmVhazsKPiArCWNhc2UgOTYwMDA6Cj4gKwkJcmF0ZSA9IEFEVjc1MTFf U0FNUExFX0ZSRVFfOTYwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE3NjQwMDoKPiArCQlyYXRl ID0gQURWNzUxMV9TQU1QTEVfRlJFUV8xNzY0MDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE5MjAw MDoKPiArCQlyYXRlID0gQURWNzUxMV9TQU1QTEVfRlJFUV8xOTIwMDA7Cj4gKwkJYnJlYWs7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAoaHBh cm1zLT5zYW1wbGVfd2lkdGgpIHsKPiArCWNhc2UgMTY6Cj4gKwkJbGVuID0gQURWNzUxMV9JMlNf U0FNUExFX0xFTl8xNjsKPiArCQlicmVhazsKPiArCWNhc2UgMTg6Cj4gKwkJbGVuID0gQURWNzUx MV9JMlNfU0FNUExFX0xFTl8xODsKPiArCQlicmVhazsKPiArCWNhc2UgMjA6Cj4gKwkJbGVuID0g QURWNzUxMV9JMlNfU0FNUExFX0xFTl8yMDsKPiArCQlicmVhazsKPiArCWNhc2UgMjQ6Cj4gKwkJ bGVuID0gQURWNzUxMV9JMlNfU0FNUExFX0xFTl8yNDsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJc3dpdGNoIChmbXQtPmZtdCkgewo+ ICsJY2FzZSBIRE1JX0kyUzoKPiArCQlhdWRpb19zb3VyY2UgPSBBRFY3NTExX0FVRElPX1NPVVJD RV9JMlM7Cj4gKwkJaTJzX2Zvcm1hdCA9IEFEVjc1MTFfSTJTX0ZPUk1BVF9JMlM7Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIEhETUlfUklHSFRfSjoKPiArCQlhdWRpb19zb3VyY2UgPSBBRFY3NTExX0FV RElPX1NPVVJDRV9JMlM7Cj4gKwkJaTJzX2Zvcm1hdCA9IEFEVjc1MTFfSTJTX0ZPUk1BVF9SSUdI VF9KOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBIRE1JX0xFRlRfSjoKPiArCQlhdWRpb19zb3VyY2Ug PSBBRFY3NTExX0FVRElPX1NPVVJDRV9JMlM7Cj4gKwkJaTJzX2Zvcm1hdCA9IEFEVjc1MTFfSTJT X0ZPUk1BVF9MRUZUX0o7Cj4gKwkJYnJlYWs7Cj4gKy8vCWNhc2UgSERNSV9TUERJRjoKPiArLy8J CWF1ZGlvX3NvdXJjZSA9IEFEVjc1MTFfQVVESU9fU09VUkNFX1NQRElGOwo+ICsvLwkJYnJlYWs7 CgpObyBjb21tZW50ZWQgb3V0IGNvZGUgcGxlYXNlLgoKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaW52ZXJ0X2Nsb2NrID0gZm10LT5iaXRfY2xrX2ludjsK PiArCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWR2NzUxMS0+cmVnbWFwLCBBRFY3NTExX1JFR19B VURJT19TT1VSQ0UsIDB4NzAsCj4gKwkJCSAgIGF1ZGlvX3NvdXJjZSA8PCA0KTsKPiArCXJlZ21h cF91cGRhdGVfYml0cyhhZHY3NTExLT5yZWdtYXAsIEFEVjc1MTFfUkVHX0FVRElPX0NPTkZJRywg QklUKDYpLAo+ICsJCQkgICBpbnZlcnRfY2xvY2sgPDwgNik7Cj4gKwlyZWdtYXBfdXBkYXRlX2Jp dHMoYWR2NzUxMS0+cmVnbWFwLCBBRFY3NTExX1JFR19JMlNfQ09ORklHLCAweDAzLAo+ICsJCQkg ICBpMnNfZm9ybWF0KTsKPiArCj4gKwlhZHY3NTExLT5hdWRpb19zb3VyY2UgPSBhdWRpb19zb3Vy Y2U7Cj4gKwo+ICsJYWR2NzUxMS0+Zl9hdWRpbyA9IGhwYXJtcy0+c2FtcGxlX3JhdGU7Cj4gKwo+ ICsJYWR2NzUxMV91cGRhdGVfY3RzX24oYWR2NzUxMSk7Cj4gKwo+ICsJcmVnbWFwX3VwZGF0ZV9i aXRzKGFkdjc1MTEtPnJlZ21hcCwgQURWNzUxMV9SRUdfQVVESU9fQ0ZHMywKPiArCQkJICAgQURW NzUxMV9BVURJT19DRkczX0xFTl9NQVNLLCBsZW4pOwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGFk djc1MTEtPnJlZ21hcCwgQURWNzUxMV9SRUdfSTJDX0ZSRVFfSURfQ0ZHLAo+ICsJCQkgICBBRFY3 NTExX0kyQ19GUkVRX0lEX0NGR19SQVRFX01BU0ssIHJhdGUgPDwgNCk7Cj4gKwlyZWdtYXBfd3Jp dGUoYWR2NzUxMS0+cmVnbWFwLCAweDczLCAweDEpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGF1ZGlvX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpk YXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgYWR2NzUxMSAqYWR2NzUxMSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwo+ICsKPiArCXJlZ21hcF91cGRhdGVfYml0cyhhZHY3NTExLT5yZWdtYXAsIEFEVjc1MTFf UkVHX0FVRElPX0NPTkZJRywKPiArCQkJCUJJVCg3KSwgMCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgYXVkaW9fc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lk ICpkYXRhKQo+ICt7Cj4gKwoKTm8gbmVlZCBmb3IgYSBibGFuayBsaW5lLgoKPiArfQo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBoZG1pX2NvZGVjX29wcyBhZHY3NTExX2NvZGVjX29wcyA9IHsK PiArCS5od19wYXJhbXMJPSBhZHY3NTExX2hkbWlfaHdfcGFyYW1zLAo+ICsJLmF1ZGlvX3NodXRk b3duID0gYXVkaW9fc2h1dGRvd24sCj4gKwkuYXVkaW9fc3RhcnR1cAk9IGF1ZGlvX3N0YXJ0dXAs Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGhkbWlfY29kZWNfcGRhdGEgY29kZWNfZGF0YSA9 IHsKPiArCS5vcHMgPSAmYWR2NzUxMV9jb2RlY19vcHMsCj4gKwkubWF4X2kyc19jaGFubmVscyA9 IDIsCj4gKwkuaTJzID0gMSwKPiArfTsKPiArCj4gK2ludCBhZHY3NTExX2F1ZGlvX2luaXQoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgYWR2NzUxMSAqYWR2NzUxMSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOwoKV2h5IGRvbid0IHlvdSBwYXNzIHRoZSBzdHJ1Y3QgYWR2NzUxMSBw b2ludGVyIGRpcmVjdGx5IHRvIHRoaXMgZnVuY3Rpb24gPwoKPiArCWFkdjc1MTEtPmF1ZGlvX3Bk ZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShkZXYsCj4gKwkJCQkJSERNSV9DT0RF Q19EUlZfTkFNRSwKPiArCQkJCQlQTEFURk9STV9ERVZJRF9BVVRPLAo+ICsJCQkJCSZjb2RlY19k YXRhLAo+ICsJCQkJCXNpemVvZihjb2RlY19kYXRhKSk7Cj4gKwlyZXR1cm4gUFRSX0VSUl9PUl9a RVJPKGFkdjc1MTEtPmF1ZGlvX3BkZXYpOwo+ICt9Cj4gKwo+ICt2b2lkIGFkdjc1MTFfYXVkaW9f ZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBhZHY3NTExICphZHY3NTEx ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CgpTYW1lIGhlcmUuCgo+ICsKPiArCWlmIChhZHY3NTEx LT5hdWRpb19wZGV2KSB7Cj4gKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYWR2NzUxMS0+ YXVkaW9fcGRldik7Cj4gKwkJYWR2NzUxMS0+YXVkaW9fcGRldiA9IE5VTEw7Cj4gKwl9Cj4gK30K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL2Fkdjc1MTFfZHJ2 LmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2NzUxMS9hZHY3NTExX2Rydi5jIGluZGV4 IGY4ZWI3ZjguLjM3NTY5OTQKPiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2Fkdjc1MTEvYWR2NzUxMV9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2 NzUxMS9hZHY3NTExX2Rydi5jCj4gQEAgLTEwMzcsNiArMTAzNyw5IEBAIHN0YXRpYyBpbnQgYWR2 NzUxMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBjb25zdAo+IHN0cnVjdCBpMmNfZGV2 aWNlX2lkICppZCkgZ290byBlcnJfdW5yZWdpc3Rlcl9jZWM7Cj4gIAl9Cj4gCj4gKwlkZXZfc2V0 X2RydmRhdGEoZGV2LCBhZHY3NTExKTsKClRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBp MmNfc2V0X2NsaWVudGRhdGEoKSBjYWxsIGVhcmxpZXIgaW4gdGhpcyAKZnVuY3Rpb24uCgo+ICsJ YWR2NzUxMV9hdWRpb19pbml0KGRldik7Cj4gKwo+ICAJcmV0dXJuIDA7Cj4gCj4gIGVycl91bnJl Z2lzdGVyX2NlYzoKPiBAQCAtMTA1OCw2ICsxMDYxLDggQEAgc3RhdGljIGludCBhZHY3NTExX3Jl bW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQo+IAo+ICAJZHJtX2JyaWRnZV9yZW1vdmUoJmFk djc1MTEtPmJyaWRnZSk7Cj4gCj4gKwlhZHY3NTExX2F1ZGlvX2V4aXQoJmkyYy0+ZGV2KTsKPiAr Cj4gIAlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoYWR2NzUxMS0+aTJjX2VkaWQpOwo+IAo+ICAJa2Zy ZWUoYWR2NzUxMS0+ZWRpZCk7CgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757756AbcH3JVk (ORCPT ); Tue, 30 Aug 2016 05:21:40 -0400 Received: from galahad.ideasonboard.com ([185.26.127.97]:36381 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755134AbcH3JVi (ORCPT ); Tue, 30 Aug 2016 05:21:38 -0400 From: Laurent Pinchart To: John Stultz Cc: lkml , David Airlie , Archit Taneja , Wolfram Sang , Srinivas Kandagatla , Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= , Boris Brezillon , Andy Green , Dave Long , Guodong Xu , Zhangfei Gao , Mark Brown , Lars-Peter Clausen , Jose Abreu , dri-devel@lists.freedesktop.org Subject: Re: [PATCH 2/4 v2] drm/bridge: adv7511: Add Audio support. Date: Tue, 30 Aug 2016 12:21:56 +0300 Message-ID: <3891360.sBkMj3IaSD@avalon> User-Agent: KMail/4.14.10 (Linux/4.4.6-gentoo; KDE/4.14.20; x86_64; ; ) In-Reply-To: <1472514096-10915-3-git-send-email-john.stultz@linaro.org> References: <1472514096-10915-1-git-send-email-john.stultz@linaro.org> <1472514096-10915-3-git-send-email-john.stultz@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id u7U9LjLs028134 Hi John, Thank you for the patch. On Monday 29 Aug 2016 16:41:34 John Stultz wrote: > This patch adds support to Audio for both adv7511 and adv7533 > bridge chips. > > This patch was originally from [1] by Lars-Peter Clausen > and was adapted by Archit Taneja and > Srinivas Kandagatla . > > Then I heavily reworked it to use the hdmi-codec driver. So credit > to them, but blame to me. > > [1] > https://github.com/analogdevicesinc/linux/blob/xcomm_zynq/drivers/gpu/drm/i > 2c/adv7511_audio.c > > Cc: David Airlie > Cc: Archit Taneja > Cc: Laurent Pinchart > Cc: Wolfram Sang > Cc: Srinivas Kandagatla > Cc: "Ville Syrjälä" > Cc: Boris Brezillon > Cc: Andy Green > Cc: Dave Long > Cc: Guodong Xu > Cc: Zhangfei Gao > Cc: Mark Brown > Cc: Lars-Peter Clausen > Cc: Jose Abreu > Cc: dri-devel@lists.freedesktop.org > Signed-off-by: John Stultz > --- > v2: Integrated feedback from Srinivas > > drivers/gpu/drm/bridge/adv7511/Kconfig | 1 + > drivers/gpu/drm/bridge/adv7511/Makefile | 2 +- > drivers/gpu/drm/bridge/adv7511/adv7511.h | 5 + > drivers/gpu/drm/bridge/adv7511/adv7511_audio.c | 199 ++++++++++++++++++++++ > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 5 + > 5 files changed, 211 insertions(+), 1 deletion(-) > create mode 100644 drivers/gpu/drm/bridge/adv7511/adv7511_audio.c > > diff --git a/drivers/gpu/drm/bridge/adv7511/Kconfig > b/drivers/gpu/drm/bridge/adv7511/Kconfig index d2b0499..e3975e9 100644 > --- a/drivers/gpu/drm/bridge/adv7511/Kconfig > +++ b/drivers/gpu/drm/bridge/adv7511/Kconfig > @@ -3,6 +3,7 @@ config DRM_I2C_ADV7511 > depends on OF > select DRM_KMS_HELPER > select REGMAP_I2C > + select SND_SOC_HDMI_CODEC if SND_SOC Shouldn't sound support be optional ? I can imagine a board that doesn't wire up sound to the ADV7511 but still uses SND_SOC for other purposes. > help > Support for the Analog Device ADV7511(W) and ADV7513 HDMI encoders. > > diff --git a/drivers/gpu/drm/bridge/adv7511/Makefile > b/drivers/gpu/drm/bridge/adv7511/Makefile index 9019327..ad7245d 100644 > --- a/drivers/gpu/drm/bridge/adv7511/Makefile > +++ b/drivers/gpu/drm/bridge/adv7511/Makefile > @@ -1,3 +1,3 @@ > -adv7511-y := adv7511_drv.o > +adv7511-y := adv7511_drv.o adv7511_audio.o Could we avoid compiling adv7511_audio.o if sound support isn't desired to avoid bloating the kernel ? > adv7511-$(CONFIG_DRM_I2C_ADV7533) += adv7533.o > obj-$(CONFIG_DRM_I2C_ADV7511) += adv7511.o > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h > b/drivers/gpu/drm/bridge/adv7511/adv7511.h index c7002a0..2e4d340 100644 > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h > @@ -23,6 +23,8 @@ struct adv7511; > > int adv7511_packet_enable(struct adv7511 *adv7511, unsigned int packet); > int adv7511_packet_disable(struct adv7511 *adv7511, unsigned int packet); > +int adv7511_audio_init(struct device *dev); > +void adv7511_audio_exit(struct device *dev); > > #define ADV7511_REG_CHIP_REVISION 0x00 > #define ADV7511_REG_N0 0x01 > @@ -317,6 +319,8 @@ struct adv7511 { > struct drm_display_mode curr_mode; > > unsigned int f_tmds; > + unsigned int f_audio; > + unsigned int audio_source; > > unsigned int current_edid_segment; > uint8_t edid_buf[256]; > @@ -342,6 +346,7 @@ struct adv7511 { > bool use_timing_gen; > > enum adv7511_type type; > + struct platform_device *audio_pdev; > }; > > #ifdef CONFIG_DRM_I2C_ADV7533 > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c > b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c new file mode 100644 > index 0000000..0e0ea6b > --- /dev/null > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c > @@ -0,0 +1,199 @@ > +/* > + * Analog Devices ADV7511 HDMI transmitter driver > + * > + * Copyright 2012 Analog Devices Inc. > + * Copyright (c) 2016, Linaro Limited > + * > + * Licensed under the GPL-2. > + */ > + > +#include > +#include > +#include > +#include > + > +#include "adv7511.h" > + > +static void adv7511_calc_cts_n(unsigned int f_tmds, unsigned int fs, > + unsigned int *cts, unsigned int *n) > +{ > + switch (fs) { > + case 32000: > + *n = 4096; > + break; > + case 44100: > + *n = 6272; > + break; > + case 48000: > + *n = 6144; > + break; > + } > + > + *cts = ((f_tmds * *n) / (128 * fs)) * 1000; > +} > + > +static int adv7511_update_cts_n(struct adv7511 *adv7511) > +{ > + unsigned int cts = 0; > + unsigned int n = 0; > + > + adv7511_calc_cts_n(adv7511->f_tmds, adv7511->f_audio, &cts, &n); > + > + regmap_write(adv7511->regmap, ADV7511_REG_N0, (n >> 16) & 0xf); > + regmap_write(adv7511->regmap, ADV7511_REG_N1, (n >> 8) & 0xff); > + regmap_write(adv7511->regmap, ADV7511_REG_N2, n & 0xff); > + > + regmap_write(adv7511->regmap, ADV7511_REG_CTS_MANUAL0, > + (cts >> 16) & 0xf); > + regmap_write(adv7511->regmap, ADV7511_REG_CTS_MANUAL1, > + (cts >> 8) & 0xff); > + regmap_write(adv7511->regmap, ADV7511_REG_CTS_MANUAL2, > + cts & 0xff); > + > + return 0; > +} > + > +int adv7511_hdmi_hw_params(struct device *dev, void *data, > + struct hdmi_codec_daifmt *fmt, > + struct hdmi_codec_params *hparms) > +{ > + struct adv7511 *adv7511 = dev_get_drvdata(dev); > + unsigned int audio_source, i2s_format = 0; > + unsigned int invert_clock; > + unsigned int rate; > + unsigned int len; > + > + switch (hparms->sample_rate) { > + case 32000: > + rate = ADV7511_SAMPLE_FREQ_32000; > + break; > + case 44100: > + rate = ADV7511_SAMPLE_FREQ_44100; > + break; > + case 48000: > + rate = ADV7511_SAMPLE_FREQ_48000; > + break; > + case 88200: > + rate = ADV7511_SAMPLE_FREQ_88200; > + break; > + case 96000: > + rate = ADV7511_SAMPLE_FREQ_96000; > + break; > + case 176400: > + rate = ADV7511_SAMPLE_FREQ_176400; > + break; > + case 192000: > + rate = ADV7511_SAMPLE_FREQ_192000; > + break; > + default: > + return -EINVAL; > + } > + > + switch (hparms->sample_width) { > + case 16: > + len = ADV7511_I2S_SAMPLE_LEN_16; > + break; > + case 18: > + len = ADV7511_I2S_SAMPLE_LEN_18; > + break; > + case 20: > + len = ADV7511_I2S_SAMPLE_LEN_20; > + break; > + case 24: > + len = ADV7511_I2S_SAMPLE_LEN_24; > + break; > + default: > + return -EINVAL; > + } > + > + switch (fmt->fmt) { > + case HDMI_I2S: > + audio_source = ADV7511_AUDIO_SOURCE_I2S; > + i2s_format = ADV7511_I2S_FORMAT_I2S; > + break; > + case HDMI_RIGHT_J: > + audio_source = ADV7511_AUDIO_SOURCE_I2S; > + i2s_format = ADV7511_I2S_FORMAT_RIGHT_J; > + break; > + case HDMI_LEFT_J: > + audio_source = ADV7511_AUDIO_SOURCE_I2S; > + i2s_format = ADV7511_I2S_FORMAT_LEFT_J; > + break; > +// case HDMI_SPDIF: > +// audio_source = ADV7511_AUDIO_SOURCE_SPDIF; > +// break; No commented out code please. > + default: > + return -EINVAL; > + } > + > + invert_clock = fmt->bit_clk_inv; > + > + regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_SOURCE, 0x70, > + audio_source << 4); > + regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG, BIT(6), > + invert_clock << 6); > + regmap_update_bits(adv7511->regmap, ADV7511_REG_I2S_CONFIG, 0x03, > + i2s_format); > + > + adv7511->audio_source = audio_source; > + > + adv7511->f_audio = hparms->sample_rate; > + > + adv7511_update_cts_n(adv7511); > + > + regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CFG3, > + ADV7511_AUDIO_CFG3_LEN_MASK, len); > + regmap_update_bits(adv7511->regmap, ADV7511_REG_I2C_FREQ_ID_CFG, > + ADV7511_I2C_FREQ_ID_CFG_RATE_MASK, rate << 4); > + regmap_write(adv7511->regmap, 0x73, 0x1); > + > + return 0; > +} > + > +static int audio_startup(struct device *dev, void *data) > +{ > + struct adv7511 *adv7511 = dev_get_drvdata(dev); > + > + regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG, > + BIT(7), 0); > + return 0; > +} > + > +static void audio_shutdown(struct device *dev, void *data) > +{ > + No need for a blank line. > +} > + > +static const struct hdmi_codec_ops adv7511_codec_ops = { > + .hw_params = adv7511_hdmi_hw_params, > + .audio_shutdown = audio_shutdown, > + .audio_startup = audio_startup, > +}; > + > +static struct hdmi_codec_pdata codec_data = { > + .ops = &adv7511_codec_ops, > + .max_i2s_channels = 2, > + .i2s = 1, > +}; > + > +int adv7511_audio_init(struct device *dev) > +{ > + struct adv7511 *adv7511 = dev_get_drvdata(dev); Why don't you pass the struct adv7511 pointer directly to this function ? > + adv7511->audio_pdev = platform_device_register_data(dev, > + HDMI_CODEC_DRV_NAME, > + PLATFORM_DEVID_AUTO, > + &codec_data, > + sizeof(codec_data)); > + return PTR_ERR_OR_ZERO(adv7511->audio_pdev); > +} > + > +void adv7511_audio_exit(struct device *dev) > +{ > + struct adv7511 *adv7511 = dev_get_drvdata(dev); Same here. > + > + if (adv7511->audio_pdev) { > + platform_device_unregister(adv7511->audio_pdev); > + adv7511->audio_pdev = NULL; > + } > +} > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index f8eb7f8..3756994 > 100644 > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > @@ -1037,6 +1037,9 @@ static int adv7511_probe(struct i2c_client *i2c, const > struct i2c_device_id *id) goto err_unregister_cec; > } > > + dev_set_drvdata(dev, adv7511); This is already handled by the i2c_set_clientdata() call earlier in this function. > + adv7511_audio_init(dev); > + > return 0; > > err_unregister_cec: > @@ -1058,6 +1061,8 @@ static int adv7511_remove(struct i2c_client *i2c) > > drm_bridge_remove(&adv7511->bridge); > > + adv7511_audio_exit(&i2c->dev); > + > i2c_unregister_device(adv7511->i2c_edid); > > kfree(adv7511->edid); -- Regards, Laurent Pinchart