From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jassi Brar Subject: Re: [PATCH 14/15] ASoC: Samsung: Update DMA interface Date: Tue, 9 Aug 2011 00:57:44 +0530 Message-ID: References: <1311744697-10264-1-git-send-email-boojin.kim@samsung.com> <1311744697-10264-15-git-send-email-boojin.kim@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Return-path: Received: from mail-ey0-f174.google.com ([209.85.215.174]:33139 "EHLO mail-ey0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752066Ab1HHT1q (ORCPT ); Mon, 8 Aug 2011 15:27:46 -0400 Received: by eyx24 with SMTP id 24so2958472eyx.19 for ; Mon, 08 Aug 2011 12:27:44 -0700 (PDT) In-Reply-To: <1311744697-10264-15-git-send-email-boojin.kim@samsung.com> Sender: linux-samsung-soc-owner@vger.kernel.org List-Id: linux-samsung-soc@vger.kernel.org To: Boojin Kim Cc: linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Vinod Koul , Dan Williams , Kukjin Kim , Mark Brown , Grant Likely , Russell King , Liam Girdwood T24gV2VkLCBKdWwgMjcsIDIwMTEgYXQgMTE6MDEgQU0sIEJvb2ppbiBLaW0gPGJvb2ppbi5raW1A c2Ftc3VuZy5jb20+IHdyb3RlOgoKPiDCoHN0YXRpYyB2b2lkIGRtYV9lbnF1ZXVlKHN0cnVjdCBz bmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQo+IMKgewo+IMKgIMKgIMKgIMKgc3RydWN0IHJ1 bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwo+IMKg IMKgIMKgIMKgZG1hX2FkZHJfdCBwb3MgPSBwcnRkLT5kbWFfcG9zOwo+IMKgIMKgIMKgIMKgdW5z aWduZWQgaW50IGxpbWl0Owo+IC0gwqAgwqAgwqAgaW50IHJldDsKPiArIMKgIMKgIMKgIHN0cnVj dCBzYW1zdW5nX2RtYV9wcmVwX2luZm8gZG1hX2luZm87Cj4KPiDCoCDCoCDCoCDCoHByX2RlYnVn KCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Cj4KPiAtIMKgIMKgIMKgIGlmIChzM2NfZG1hX2hh c19jaXJjdWxhcigpKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGltaXQgPSAocHJ0ZC0+ZG1h X2VuZCAtIHBydGQtPmRtYV9zdGFydCkgLyBwcnRkLT5kbWFfcGVyaW9kOwo+IC0gwqAgwqAgwqAg ZWxzZQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGltaXQgPSBwcnRkLT5kbWFfbGltaXQ7Cj4g KyDCoCDCoCDCoCBsaW1pdCA9IChwcnRkLT5kbWFfZW5kIC0gcHJ0ZC0+ZG1hX3N0YXJ0KSAvIHBy dGQtPmRtYV9wZXJpb2Q7CgonZG1hX2xpbWl0JyBpcyByZW5kZXJlZCB1c2VsZXNzLCBzbyB5b3Ug bWlnaHQgd2FudCB0byByZW1vdmUgaXQgZnJvbQonc3RydWN0IHJ1bnRpbWVfZGF0YScKYXMgd2Vs bC4KCj4gwqAgwqAgwqAgwqBwcl9kZWJ1ZygiJXM6IGxvYWRlZCAlZCwgbGltaXQgJWRcbiIsCj4g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBfX2Z1bmNfXywg cHJ0ZC0+ZG1hX2xvYWRlZCwgbGltaXQpOwo+Cj4gLSDCoCDCoCDCoCB3aGlsZSAocHJ0ZC0+ZG1h X2xvYWRlZCA8IGxpbWl0KSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1bnNpZ25lZCBsb25n IGxlbiA9IHBydGQtPmRtYV9wZXJpb2Q7Cj4gKyDCoCDCoCDCoCBkbWFfaW5mby5jYXAgPSAoc2Ft c3VuZ19kbWFfaGFzX2NpcmN1bGFyKCkgPyBETUFfQ1lDTElDIDogRE1BX1NMQVZFKTsKPiArIMKg IMKgIMKgIGRtYV9pbmZvLmRpcmVjdGlvbiA9Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoc3Vi c3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKPiArIMKgIMKg IMKgIGRtYV9pbmZvLmZwID0gYXVkaW9fYnVmZmRvbmU7Cj4gKyDCoCDCoCDCoCBkbWFfaW5mby5m cF9wYXJhbSA9IHN1YnN0cmVhbTsKPiArIMKgIMKgIMKgIGRtYV9pbmZvLnBlcmlvZCA9IHBydGQt PmRtYV9wZXJpb2Q7Cj4gKyDCoCDCoCDCoCBkbWFfaW5mby5sZW4gPSBwcnRkLT5kbWFfcGVyaW9k KmxpbWl0Owo+Cj4gKyDCoCDCoCDCoCB3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IGxpbWl0KSB7 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcl9kZWJ1ZygiZG1hX2xvYWRlZDogJWRcbiIsIHBy dGQtPmRtYV9sb2FkZWQpOwo+Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKHBvcyArIGxl bikgPiBwcnRkLT5kbWFfZW5kKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBsZW4gwqA9IHBydGQtPmRtYV9lbmQgLSBwb3M7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBwcl9kZWJ1ZygiJXM6IGNvcnJlY3RlZCBkbWEgbGVuICVsZFxuIiwgX19mdW5j X18sIGxlbik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKHBvcyArIGRtYV9pbmZvLnBl cmlvZCkgPiBwcnRkLT5kbWFfZW5kKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBkbWFfaW5mby5wZXJpb2QgwqA9IHBydGQtPmRtYV9lbmQgLSBwb3M7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcl9kZWJ1ZygiJXM6IGNvcnJlY3RlZCBkbWEgbGVu ICVsZFxuIiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIF9fZnVuY19fLCBkbWFfaW5mby5wZXJpb2QpOwo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgfQo+Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXQgPSBzM2MyNDEwX2RtYV9l bnF1ZXVlKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHN1YnN0cmVhbSwgcG9zLCBsZW4pOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg ZG1hX2luZm8uYnVmID0gcG9zOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJ0ZC0+cGFyYW1z LT5vcHMtPnByZXBhcmUocHJ0ZC0+cGFyYW1zLT5jaCwgJmRtYV9pbmZvKTsKPgo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYgKHJldCA9PSAwKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBwcnRkLT5kbWFfbG9hZGVkKys7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBwb3MgKz0gcHJ0ZC0+ZG1hX3BlcmlvZDsKPiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGlmIChwb3MgPj0gcHJ0ZC0+ZG1hX2VuZCkKPiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBvcyA9IHBydGQtPmRtYV9zdGFydDsK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxzZQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcnRkLT5kbWFfbG9h ZGVkKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwb3MgKz0gcHJ0ZC0+ZG1hX3BlcmlvZDsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChwb3MgPj0gcHJ0ZC0+ZG1hX2VuZCkKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBvcyA9IHBydGQtPmRtYV9zdGFydDsKPiDC oCDCoCDCoCDCoH0KPgo+IMKgIMKgIMKgIMKgcHJ0ZC0+ZG1hX3BvcyA9IHBvczsKPiDCoH0KPgo+ IC1zdGF0aWMgdm9pZCBhdWRpb19idWZmZG9uZShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hh bm5lbCwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZv aWQgKmRldl9pZCwgaW50IHNpemUsCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBlbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzdWx0KQo+ICtzdGF0 aWMgdm9pZCBhdWRpb19idWZmZG9uZSh2b2lkICpkYXRhKQo+IMKgewo+IC0gwqAgwqAgwqAgc3Ry dWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBkZXZfaWQ7Cj4gLSDCoCDCoCDCoCBz dHJ1Y3QgcnVudGltZV9kYXRhICpwcnRkOwo+ICsgwqAgwqAgwqAgc3RydWN0IHNuZF9wY21fc3Vi c3RyZWFtICpzdWJzdHJlYW0gPSBkYXRhOwo+ICsgwqAgwqAgwqAgc3RydWN0IHJ1bnRpbWVfZGF0 YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwo+Cj4gwqAgwqAgwqAg wqBwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwo+Cj4gLSDCoCDCoCDCoCBpZiAo cmVzdWx0ID09IFMzQzI0MTBfUkVTX0FCT1JUIHx8IHJlc3VsdCA9PSBTM0MyNDEwX1JFU19FUlIp Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm47Cj4gLQo+IC0gwqAgwqAgwqAgcHJ0ZCA9 IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwo+ICsgwqAgwqAgwqAgaWYgKHBydGQt PnN0YXRlICYgU1RfUlVOTklORykgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJ0ZC0+ZG1h X3BvcyArPSBwcnRkLT5kbWFfcGVyaW9kOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHBy dGQtPmRtYV9wb3MgPj0gcHJ0ZC0+ZG1hX2VuZCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHBydGQtPmRtYV9wb3MgPSBwcnRkLT5kbWFfc3RhcnQ7Cj4KPiAtIMKgIMKgIMKg IGlmIChzdWJzdHJlYW0pCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzbmRfcGNtX3BlcmlvZF9l bGFwc2VkKHN1YnN0cmVhbSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoc3Vic3RyZWFt KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc25kX3BjbV9wZXJpb2RfZWxh cHNlZChzdWJzdHJlYW0pOwo+Cj4gLSDCoCDCoCDCoCBzcGluX2xvY2soJnBydGQtPmxvY2spOwo+ IC0gwqAgwqAgwqAgaWYgKHBydGQtPnN0YXRlICYgU1RfUlVOTklORyAmJiAhczNjX2RtYV9oYXNf Y2lyY3VsYXIoKSkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJ0ZC0+ZG1hX2xvYWRlZC0t Owo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgZG1hX2VucXVldWUoc3Vic3RyZWFtKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAoIXNhbXN1bmdfZG1hX2hhc19jaXJjdWxhcigpKSB7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcnRkLT5kbWFfbG9hZGVkLS07Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFfZW5xdWV1ZShzdWJzdHJlYW0pOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3Bpbl91bmxvY2so JnBydGQtPmxvY2spOwo+IMKgIMKgIMKgIMKgfQo+IC0KPiAtIMKgIMKgIMKgIHNwaW5fdW5sb2Nr KCZwcnRkLT5sb2NrKTsKPiDCoH0KClNpbmNlIHdlIHNldCBpbnRlZ2VyLWNvbnN0cmFpbnQgb24g bnVtYmVyIG9mIHBlcmlvZHMsIHlvdSBjb3VsZCBhbHNvCmRpc2NhcmQgYm90aGVyaW5nIGZyYWN0 aW9uYWwgYm91bmRhcmllcy4gVGhhdCB3b3VsZCBtYWtlIHRoaW5ncyBhIGxvdApzaW1wbGVyLgoK Cgo+IEBAIC0yNjUsMTQgKzI1MCwxNCBAQCBzdGF0aWMgaW50IGRtYV90cmlnZ2VyKHN0cnVjdCBz bmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQo+IMKgIMKgIMKgIMKgY2FzZSBT TkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Cj4gwqAgwqAgwqAgwqBjYXNlIFNORFJWX1BDTV9UUklH R0VSX1BBVVNFX1JFTEVBU0U6Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcnRkLT5zdGF0ZSB8 PSBTVF9SVU5OSU5HOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgczNjMjQxMF9kbWFfY3RybChw cnRkLT5wYXJhbXMtPmNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlQpOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcHJ0ZC0+cGFyYW1zLT5vcHMtPnRyaWdnZXIocHJ0ZC0+cGFyYW1zLT5jaCk7 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPgo+IMKgIMKgIMKgIMKgY2FzZSBTTkRS Vl9QQ01fVFJJR0dFUl9TVE9QOgo+IMKgIMKgIMKgIMKgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9T VVNQRU5EOgo+IMKgIMKgIMKgIMKgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgo+ IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcHJ0ZC0+c3RhdGUgJj0gflNUX1JVTk5JTkc7Cj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCBzM2MyNDEwX2RtYV9jdHJsKHBydGQtPnBhcmFtcy0+Y2hhbm5l bCwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBydGQtPnBh cmFtcy0+b3BzLT5zdG9wKHBydGQtPnBhcmFtcy0+Y2gpOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgYnJlYWs7CgpJIHdpc2ggeW91IGFncmVlZCBhbmQgdXNlZAogICAgICAgcHJ0ZC0+cGFyYW1z LT5vcHMtPmNtZChjaCwgZW51bSBzb21lX2NtZF9vcHRpb25zKQpyYXRoZXIgdGhhbiBoYXZpbmcg NCBzZXBhcmF0ZSBjYWxsYmFja3MKICAgICAgcHJ0ZC0+cGFyYW1zLT5vcHMtPnRyaWdnZXIocHJ0 ZC0+cGFyYW1zLT5jaCkKICAgICAgcHJ0ZC0+cGFyYW1zLT5vcHMtPnN0b3AocHJ0ZC0+cGFyYW1z LT5jaCkKICAgICBwcnRkLT5wYXJhbXMtPm9wcy0+Zmx1c2gocHJ0ZC0+cGFyYW1zLT5jaCkKICAg ICBwcnRkLT5wYXJhbXMtPm9wcy0+c3RhcnRlZChwcnRkLT5wYXJhbXMtPmNoKQoKCj4gQEAgLTI5 MSwyMSArMjc2LDEyIEBAIGRtYV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vi c3RyZWFtKQo+IMKgIMKgIMKgIMKgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1 YnN0cmVhbS0+cnVudGltZTsKPiDCoCDCoCDCoCDCoHN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQg PSBydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gwqAgwqAgwqAgwqB1bnNpZ25lZCBsb25nIHJlczsK PiAtIMKgIMKgIMKgIGRtYV9hZGRyX3Qgc3JjLCBkc3Q7Cj4KPiDCoCDCoCDCoCDCoHByX2RlYnVn KCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Cj4KPiAtIMKgIMKgIMKgIHNwaW5fbG9jaygmcHJ0 ZC0+bG9jayk7Cj4gLSDCoCDCoCDCoCBzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbihwcnRkLT5wYXJh bXMtPmNoYW5uZWwsICZzcmMsICZkc3QpOwo+IC0KPiAtIMKgIMKgIMKgIGlmIChzdWJzdHJlYW0t PnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCByZXMgPSBkc3QgLSBwcnRkLT5kbWFfc3RhcnQ7Cj4gLSDCoCDCoCDCoCBlbHNlCj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCByZXMgPSBzcmMgLSBwcnRkLT5kbWFfc3RhcnQ7Cj4gLQo+IC0g wqAgwqAgwqAgc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOwo+ICsgwqAgwqAgwqAgcmVzID0gcHJ0 ZC0+ZG1hX3BvcyAtIHBydGQtPmRtYV9zdGFydDsKPgo+IC0gwqAgwqAgwqAgcHJfZGVidWcoIlBv aW50ZXIgJXggJXhcbiIsIHNyYywgZHN0KTsKPiArIMKgIMKgIMKgIHByX2RlYnVnKCJQb2ludGVy IG9mZnNldDogJWx1XG4iLCByZXMpOwo+Cj4gwqAgwqAgwqAgwqAvKiB3ZSBzZWVtIHRvIGJlIGdl dHRpbmcgdGhlIG9kZCBlcnJvciBmcm9tIHRoZSBwY20gbGlicmFyeSBkdWUKPiDCoCDCoCDCoCDC oCAqIHRvIG91dC1vZi1ib3VuZHMgcG9pbnRlcnMuIHRoaXMgaXMgbWF5YmUgZHVlIHRvIHRoZSBk bWEgZW5naW5lCgpJc24ndCB0aGlzIGEgcmVncmVzc2lvbiA/CmRtYV9wb2ludGVyKCkgZG9lc24n dCByZWFsbHkgcmV0dXJuIGFjdHVhbCBsb2NhdGlvbiBvZiBETUEgYWN0aXZpdHkgYW55bW9yZS4K Tm93IGl0IHNpbXBseSB0ZWxscyB0aGUgbGFzdCBwZXJpb2QgZG9uZS4KVGhpcyB3b3VsZCBhZmZl Y3QgbGF0ZW5jaWVzIGluIGEgYmFkIHdheS4K From mboxrd@z Thu Jan 1 00:00:00 1970 From: jassisinghbrar@gmail.com (Jassi Brar) Date: Tue, 9 Aug 2011 00:57:44 +0530 Subject: [PATCH 14/15] ASoC: Samsung: Update DMA interface In-Reply-To: <1311744697-10264-15-git-send-email-boojin.kim@samsung.com> References: <1311744697-10264-1-git-send-email-boojin.kim@samsung.com> <1311744697-10264-15-git-send-email-boojin.kim@samsung.com> Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, Jul 27, 2011 at 11:01 AM, Boojin Kim wrote: > ?static void dma_enqueue(struct snd_pcm_substream *substream) > ?{ > ? ? ? ?struct runtime_data *prtd = substream->runtime->private_data; > ? ? ? ?dma_addr_t pos = prtd->dma_pos; > ? ? ? ?unsigned int limit; > - ? ? ? int ret; > + ? ? ? struct samsung_dma_prep_info dma_info; > > ? ? ? ?pr_debug("Entered %s\n", __func__); > > - ? ? ? if (s3c_dma_has_circular()) > - ? ? ? ? ? ? ? limit = (prtd->dma_end - prtd->dma_start) / prtd->dma_period; > - ? ? ? else > - ? ? ? ? ? ? ? limit = prtd->dma_limit; > + ? ? ? limit = (prtd->dma_end - prtd->dma_start) / prtd->dma_period; 'dma_limit' is rendered useless, so you might want to remove it from 'struct runtime_data' as well. > ? ? ? ?pr_debug("%s: loaded %d, limit %d\n", > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?__func__, prtd->dma_loaded, limit); > > - ? ? ? while (prtd->dma_loaded < limit) { > - ? ? ? ? ? ? ? unsigned long len = prtd->dma_period; > + ? ? ? dma_info.cap = (samsung_dma_has_circular() ? DMA_CYCLIC : DMA_SLAVE); > + ? ? ? dma_info.direction = > + ? ? ? ? ? ? ? (substream->stream == SNDRV_PCM_STREAM_PLAYBACK > + ? ? ? ? ? ? ? ? DMA_TO_DEVICE : DMA_FROM_DEVICE); > + ? ? ? dma_info.fp = audio_buffdone; > + ? ? ? dma_info.fp_param = substream; > + ? ? ? dma_info.period = prtd->dma_period; > + ? ? ? dma_info.len = prtd->dma_period*limit; > > + ? ? ? while (prtd->dma_loaded < limit) { > ? ? ? ? ? ? ? ?pr_debug("dma_loaded: %d\n", prtd->dma_loaded); > > - ? ? ? ? ? ? ? if ((pos + len) > prtd->dma_end) { > - ? ? ? ? ? ? ? ? ? ? ? len ?= prtd->dma_end - pos; > - ? ? ? ? ? ? ? ? ? ? ? pr_debug("%s: corrected dma len %ld\n", __func__, len); > + ? ? ? ? ? ? ? if ((pos + dma_info.period) > prtd->dma_end) { > + ? ? ? ? ? ? ? ? ? ? ? dma_info.period ?= prtd->dma_end - pos; > + ? ? ? ? ? ? ? ? ? ? ? pr_debug("%s: corrected dma len %ld\n", > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? __func__, dma_info.period); > ? ? ? ? ? ? ? ?} > > - ? ? ? ? ? ? ? ret = s3c2410_dma_enqueue(prtd->params->channel, > - ? ? ? ? ? ? ? ? ? ? ? substream, pos, len); > + ? ? ? ? ? ? ? dma_info.buf = pos; > + ? ? ? ? ? ? ? prtd->params->ops->prepare(prtd->params->ch, &dma_info); > > - ? ? ? ? ? ? ? if (ret == 0) { > - ? ? ? ? ? ? ? ? ? ? ? prtd->dma_loaded++; > - ? ? ? ? ? ? ? ? ? ? ? pos += prtd->dma_period; > - ? ? ? ? ? ? ? ? ? ? ? if (pos >= prtd->dma_end) > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pos = prtd->dma_start; > - ? ? ? ? ? ? ? } else > - ? ? ? ? ? ? ? ? ? ? ? break; > + ? ? ? ? ? ? ? prtd->dma_loaded++; > + ? ? ? ? ? ? ? pos += prtd->dma_period; > + ? ? ? ? ? ? ? if (pos >= prtd->dma_end) > + ? ? ? ? ? ? ? ? ? ? ? pos = prtd->dma_start; > ? ? ? ?} > > ? ? ? ?prtd->dma_pos = pos; > ?} > > -static void audio_buffdone(struct s3c2410_dma_chan *channel, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void *dev_id, int size, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enum s3c2410_dma_buffresult result) > +static void audio_buffdone(void *data) > ?{ > - ? ? ? struct snd_pcm_substream *substream = dev_id; > - ? ? ? struct runtime_data *prtd; > + ? ? ? struct snd_pcm_substream *substream = data; > + ? ? ? struct runtime_data *prtd = substream->runtime->private_data; > > ? ? ? ?pr_debug("Entered %s\n", __func__); > > - ? ? ? if (result == S3C2410_RES_ABORT || result == S3C2410_RES_ERR) > - ? ? ? ? ? ? ? return; > - > - ? ? ? prtd = substream->runtime->private_data; > + ? ? ? if (prtd->state & ST_RUNNING) { > + ? ? ? ? ? ? ? prtd->dma_pos += prtd->dma_period; > + ? ? ? ? ? ? ? if (prtd->dma_pos >= prtd->dma_end) > + ? ? ? ? ? ? ? ? ? ? ? prtd->dma_pos = prtd->dma_start; > > - ? ? ? if (substream) > - ? ? ? ? ? ? ? snd_pcm_period_elapsed(substream); > + ? ? ? ? ? ? ? if (substream) > + ? ? ? ? ? ? ? ? ? ? ? snd_pcm_period_elapsed(substream); > > - ? ? ? spin_lock(&prtd->lock); > - ? ? ? if (prtd->state & ST_RUNNING && !s3c_dma_has_circular()) { > - ? ? ? ? ? ? ? prtd->dma_loaded--; > - ? ? ? ? ? ? ? dma_enqueue(substream); > + ? ? ? ? ? ? ? spin_lock(&prtd->lock); > + ? ? ? ? ? ? ? if (!samsung_dma_has_circular()) { > + ? ? ? ? ? ? ? ? ? ? ? prtd->dma_loaded--; > + ? ? ? ? ? ? ? ? ? ? ? dma_enqueue(substream); > + ? ? ? ? ? ? ? } > + ? ? ? ? ? ? ? spin_unlock(&prtd->lock); > ? ? ? ?} > - > - ? ? ? spin_unlock(&prtd->lock); > ?} Since we set integer-constraint on number of periods, you could also discard bothering fractional boundaries. That would make things a lot simpler. > @@ -265,14 +250,14 @@ static int dma_trigger(struct snd_pcm_substream *substream, int cmd) > ? ? ? ?case SNDRV_PCM_TRIGGER_RESUME: > ? ? ? ?case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: > ? ? ? ? ? ? ? ?prtd->state |= ST_RUNNING; > - ? ? ? ? ? ? ? s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_START); > + ? ? ? ? ? ? ? prtd->params->ops->trigger(prtd->params->ch); > ? ? ? ? ? ? ? ?break; > > ? ? ? ?case SNDRV_PCM_TRIGGER_STOP: > ? ? ? ?case SNDRV_PCM_TRIGGER_SUSPEND: > ? ? ? ?case SNDRV_PCM_TRIGGER_PAUSE_PUSH: > ? ? ? ? ? ? ? ?prtd->state &= ~ST_RUNNING; > - ? ? ? ? ? ? ? s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_STOP); > + ? ? ? ? ? ? ? prtd->params->ops->stop(prtd->params->ch); > ? ? ? ? ? ? ? ?break; I wish you agreed and used prtd->params->ops->cmd(ch, enum some_cmd_options) rather than having 4 separate callbacks prtd->params->ops->trigger(prtd->params->ch) prtd->params->ops->stop(prtd->params->ch) prtd->params->ops->flush(prtd->params->ch) prtd->params->ops->started(prtd->params->ch) > @@ -291,21 +276,12 @@ dma_pointer(struct snd_pcm_substream *substream) > ? ? ? ?struct snd_pcm_runtime *runtime = substream->runtime; > ? ? ? ?struct runtime_data *prtd = runtime->private_data; > ? ? ? ?unsigned long res; > - ? ? ? dma_addr_t src, dst; > > ? ? ? ?pr_debug("Entered %s\n", __func__); > > - ? ? ? spin_lock(&prtd->lock); > - ? ? ? s3c2410_dma_getposition(prtd->params->channel, &src, &dst); > - > - ? ? ? if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) > - ? ? ? ? ? ? ? res = dst - prtd->dma_start; > - ? ? ? else > - ? ? ? ? ? ? ? res = src - prtd->dma_start; > - > - ? ? ? spin_unlock(&prtd->lock); > + ? ? ? res = prtd->dma_pos - prtd->dma_start; > > - ? ? ? pr_debug("Pointer %x %x\n", src, dst); > + ? ? ? pr_debug("Pointer offset: %lu\n", res); > > ? ? ? ?/* we seem to be getting the odd error from the pcm library due > ? ? ? ? * to out-of-bounds pointers. this is maybe due to the dma engine Isn't this a regression ? dma_pointer() doesn't really return actual location of DMA activity anymore. Now it simply tells the last period done. This would affect latencies in a bad way.