From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754488AbdBFPqB (ORCPT ); Mon, 6 Feb 2017 10:46:01 -0500 Received: from smtp.domeneshop.no ([194.63.252.55]:46053 "EHLO smtp.domeneshop.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754232AbdBFPpy (ORCPT ); Mon, 6 Feb 2017 10:45:54 -0500 Subject: Re: [PATCH v3 3/7] drm/tinydrm: Add MIPI DBI support To: Andrzej Hajda , Thierry Reding , Jani Nikula , Maxime Ripard References: <20170131160319.9695-1-noralf@tronnes.org> <20170131160319.9695-4-noralf@tronnes.org> <20170206084848.GC27607@ulmo.ba.sec> <87efzbblq6.fsf@intel.com> <20170206115347.GJ27607@ulmo.ba.sec> <6fe746a0-07dd-5d45-fa90-f4c092178ac1@samsung.com> Cc: thomas.petazzoni@free-electrons.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Message-ID: Date: Mon, 6 Feb 2017 16:45:47 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <6fe746a0-07dd-5d45-fa90-f4c092178ac1@samsung.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org (Adding Maxime) Den 06.02.2017 13.34, skrev Andrzej Hajda: > On 06.02.2017 12:53, Thierry Reding wrote: >> On Mon, Feb 06, 2017 at 01:30:09PM +0200, Jani Nikula wrote: >>> On Mon, 06 Feb 2017, Thierry Reding wrote: >>>> On Tue, Jan 31, 2017 at 05:03:15PM +0100, Noralf Trønnes wrote: >>>>> Add support for MIPI DBI compatible controllers. >>>>> Interface type C option 1 and 3 are supported (SPI). >>>>> >>>>> Signed-off-by: Noralf Trønnes >>>>> --- >>>>> Documentation/gpu/tinydrm.rst | 12 + >>>>> drivers/gpu/drm/tinydrm/Kconfig | 3 + >>>>> drivers/gpu/drm/tinydrm/Makefile | 3 + >>>>> drivers/gpu/drm/tinydrm/mipi-dbi.c | 1005 ++++++++++++++++++++++++++++++++++++ >>>>> include/drm/tinydrm/mipi-dbi.h | 107 ++++ >>>>> 5 files changed, 1130 insertions(+) >>>>> create mode 100644 drivers/gpu/drm/tinydrm/mipi-dbi.c >>>>> create mode 100644 include/drm/tinydrm/mipi-dbi.h >>>> Any reason why this is in the tinydrm subdirectory? Looks like this >>>> could be useful to drivers outside of it. I did consider having it outside, but I couldn't find any users in drm that could benefit from it (there is one backlight driver). But now there's Maxime's panel driver. How about something like this: (I have not included the framebuffer dirty function since it will only be used in tinydrm anyway) include/drm/drm_mipi_dbi.h: struct mipi_dbi_device; /** * mipi_dbi_dcs_write - MIPI DCS command with optional parameter(s) * @dbi: MIPI DBI structure * @cmd: Command * @seq...: Optional parameter(s) * * Send MIPI DCS command to the controller. Use mipi_dbi_dcs_read_buffer() for * get/read commands. * * Returns: * Zero on success, negative error code on failure. */ #define mipi_dbi_dcs_write(dbi, cmd, seq...) \ ({ \ const u8 d[] = { seq }; \ BUILD_BUG_ON_MSG(ARRAY_SIZE(d) > 64, "DCS sequence too big for stack");\ mipi_dbi_dcs_write_buffer(dbi, cmd, d, ARRAY_SIZE(d)); \ }) ... drivers/gpu/drm/drm_mipi_dbi.c: struct mipi_dbi_device { struct mutex lock; int (*write)(struct mipi_dbi_device *dbi, u8 cmd, const u8 *par, size_t num); int (*read)(struct mipi_dbi_device *dbi, u8 cmd, u8 *par, size_t num); bool swap16; }; /* MIPI DBI Type C options 1 and 3 */ struct mipi_dbi_spi_device { struct mipi_dbi_device dbi; struct spi_device *spi; struct gpio_desc *dc; }; /* * MIPI DBI Type B - Intel 8080 type parallel bus * I need this to fully convert staging/fbtft to drm */ struct mipi_dbi_i80_device { struct mipi_dbi_device dbi; struct device *dev; struct gpio_desc *cs; struct gpio_desc *dc; struct gpio_desc *wr; struct gpio_descs *db; }; /** * mipi_dbi_get_swap16 - Is byteswapping 16-bit pixel data needed? * @dbi: MIPI DBI device * * Byte swapping 16-bit pixel data is necessary if the bus can't support 16-bit * big endian transfers (e.g. if SPI can only do 8-bit and the machine is * little endian). This applies to the MIPI_DCS_WRITE_MEMORY_START command. * * Returns: * True if it's neccesary to swap bytes, false otherwise. */ bool mipi_dbi_get_swap16(struct mipi_dbi_device *dbi) { return dbi->swap16; } /** * mipi_dbi_spi_init - Initialize MIPI DBI SPI device * @spi: SPI device * @dc: D/C gpio (optional) * @writeonly: True if it's not possible to read from the controller. * * If @dc is set, a Type C Option 3 interface is assumed, if not * Type C Option 1 (9-bit). * * If the SPI master driver doesn't support the necessary bits per word, * the following transformation is used: * * - 9-bit: reorder buffer as 9x 8-bit words, padded with no-op command. * - 16-bit (pixel data): if machine is big endian send as 8-bit, if little * endian the user is responsible for swapping the bytes. * See mipi_dbi_get_swap_pixel_bytes(). * * Returns: * Pointer to &mipi_dbi_device on success, ERR_PTR on failure. */ struct mipi_dbi_device *mipi_dbi_spi_init(struct spi_device *spi, struct gpio_desc *dc, bool writeonly) { ... } struct mipi_dbi_device *mipi_dbi_i80_init(...) Noralf. From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v3 3/7] drm/tinydrm: Add MIPI DBI support Date: Mon, 6 Feb 2017 16:45:47 +0100 Message-ID: References: <20170131160319.9695-1-noralf@tronnes.org> <20170131160319.9695-4-noralf@tronnes.org> <20170206084848.GC27607@ulmo.ba.sec> <87efzbblq6.fsf@intel.com> <20170206115347.GJ27607@ulmo.ba.sec> <6fe746a0-07dd-5d45-fa90-f4c092178ac1@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <6fe746a0-07dd-5d45-fa90-f4c092178ac1@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrzej Hajda , Thierry Reding , Jani Nikula , Maxime Ripard Cc: thomas.petazzoni@free-electrons.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: devicetree@vger.kernel.org KEFkZGluZyBNYXhpbWUpCgpEZW4gMDYuMDIuMjAxNyAxMy4zNCwgc2tyZXYgQW5kcnplaiBIYWpk YToKPiBPbiAwNi4wMi4yMDE3IDEyOjUzLCBUaGllcnJ5IFJlZGluZyB3cm90ZToKPj4gT24gTW9u LCBGZWIgMDYsIDIwMTcgYXQgMDE6MzA6MDlQTSArMDIwMCwgSmFuaSBOaWt1bGEgd3JvdGU6Cj4+ PiBPbiBNb24sIDA2IEZlYiAyMDE3LCBUaGllcnJ5IFJlZGluZyA8dGhpZXJyeS5yZWRpbmdAZ21h aWwuY29tPiB3cm90ZToKPj4+PiBPbiBUdWUsIEphbiAzMSwgMjAxNyBhdCAwNTowMzoxNVBNICsw MTAwLCBOb3JhbGYgVHLDuG5uZXMgd3JvdGU6Cj4+Pj4+IEFkZCBzdXBwb3J0IGZvciBNSVBJIERC SSBjb21wYXRpYmxlIGNvbnRyb2xsZXJzLgo+Pj4+PiBJbnRlcmZhY2UgdHlwZSBDIG9wdGlvbiAx IGFuZCAzIGFyZSBzdXBwb3J0ZWQgKFNQSSkuCj4+Pj4+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IE5v cmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+Pj4+PiAtLS0KPj4+Pj4gICBEb2N1 bWVudGF0aW9uL2dwdS90aW55ZHJtLnJzdCAgICAgIHwgICAxMiArCj4+Pj4+ICAgZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vS2NvbmZpZyAgICB8ICAgIDMgKwo+Pj4+PiAgIGRyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL01ha2VmaWxlICAgfCAgICAzICsKPj4+Pj4gICBkcml2ZXJzL2dwdS9kcm0vdGlu eWRybS9taXBpLWRiaS5jIHwgMTAwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPj4+Pj4gICBpbmNsdWRlL2RybS90aW55ZHJtL21pcGktZGJpLmggICAgIHwgIDEwNyArKysr Cj4+Pj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCAxMTMwIGluc2VydGlvbnMoKykKPj4+Pj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vbWlwaS1kYmkuYwo+Pj4+PiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS90aW55ZHJtL21pcGktZGJpLmgKPj4+PiBB bnkgcmVhc29uIHdoeSB0aGlzIGlzIGluIHRoZSB0aW55ZHJtIHN1YmRpcmVjdG9yeT8gTG9va3Mg bGlrZSB0aGlzCj4+Pj4gY291bGQgYmUgdXNlZnVsIHRvIGRyaXZlcnMgb3V0c2lkZSBvZiBpdC4K CkkgZGlkIGNvbnNpZGVyIGhhdmluZyBpdCBvdXRzaWRlLCBidXQgSSBjb3VsZG4ndCBmaW5kIGFu eSB1c2VycyBpbiBkcm0KdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gaXQgKHRoZXJlIGlzIG9uZSBi YWNrbGlnaHQgZHJpdmVyKS4KQnV0IG5vdyB0aGVyZSdzIE1heGltZSdzIHBhbmVsIGRyaXZlci4K CkhvdyBhYm91dCBzb21ldGhpbmcgbGlrZSB0aGlzOgooSSBoYXZlIG5vdCBpbmNsdWRlZCB0aGUg ZnJhbWVidWZmZXIgZGlydHkgZnVuY3Rpb24gc2luY2UgaXQgd2lsbCBvbmx5CmJlIHVzZWQgaW4g dGlueWRybSBhbnl3YXkpCgppbmNsdWRlL2RybS9kcm1fbWlwaV9kYmkuaDoKCnN0cnVjdCBtaXBp X2RiaV9kZXZpY2U7CgovKioKICAqIG1pcGlfZGJpX2Rjc193cml0ZSAtIE1JUEkgRENTIGNvbW1h bmQgd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXIocykKICAqIEBkYmk6IE1JUEkgREJJIHN0cnVjdHVy ZQogICogQGNtZDogQ29tbWFuZAogICogQHNlcS4uLjogT3B0aW9uYWwgcGFyYW1ldGVyKHMpCiAg KgogICogU2VuZCBNSVBJIERDUyBjb21tYW5kIHRvIHRoZSBjb250cm9sbGVyLiBVc2UgCm1pcGlf ZGJpX2Rjc19yZWFkX2J1ZmZlcigpIGZvcgogICogZ2V0L3JlYWQgY29tbWFuZHMuCiAgKgogICog UmV0dXJuczoKICAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWls dXJlLgogICovCiNkZWZpbmUgbWlwaV9kYmlfZGNzX3dyaXRlKGRiaSwgY21kLCBzZXEuLi4pIFwK KHsgXAogICAgIGNvbnN0IHU4IGRbXSA9IHsgc2VxIH07IFwKICAgICBCVUlMRF9CVUdfT05fTVNH KEFSUkFZX1NJWkUoZCkgPiA2NCwgIkRDUyBzZXF1ZW5jZSB0b28gYmlnIGZvciAKc3RhY2siKTtc CiAgICAgbWlwaV9kYmlfZGNzX3dyaXRlX2J1ZmZlcihkYmksIGNtZCwgZCwgQVJSQVlfU0laRShk KSk7IFwKfSkKCi4uLgoKZHJpdmVycy9ncHUvZHJtL2RybV9taXBpX2RiaS5jOgoKc3RydWN0IG1p cGlfZGJpX2RldmljZSB7CiAgICAgc3RydWN0IG11dGV4IGxvY2s7CiAgICAgaW50ICgqd3JpdGUp KHN0cnVjdCBtaXBpX2RiaV9kZXZpY2UgKmRiaSwgdTggY21kLCBjb25zdCB1OCAqcGFyLAogICAg ICAgICAgICAgIHNpemVfdCBudW0pOwogICAgIGludCAoKnJlYWQpKHN0cnVjdCBtaXBpX2RiaV9k ZXZpY2UgKmRiaSwgdTggY21kLCB1OCAqcGFyLCBzaXplX3QgbnVtKTsKICAgICBib29sIHN3YXAx NjsKfTsKCi8qIE1JUEkgREJJIFR5cGUgQyBvcHRpb25zIDEgYW5kIDMgKi8Kc3RydWN0IG1pcGlf ZGJpX3NwaV9kZXZpY2UgewogICAgIHN0cnVjdCBtaXBpX2RiaV9kZXZpY2UgZGJpOwogICAgIHN0 cnVjdCBzcGlfZGV2aWNlICpzcGk7CiAgICAgc3RydWN0IGdwaW9fZGVzYyAqZGM7Cn07CgovKgog ICogTUlQSSBEQkkgVHlwZSBCIC0gSW50ZWwgODA4MCB0eXBlIHBhcmFsbGVsIGJ1cwogICogSSBu ZWVkIHRoaXMgdG8gZnVsbHkgY29udmVydCBzdGFnaW5nL2ZidGZ0IHRvIGRybQogICovCnN0cnVj dCBtaXBpX2RiaV9pODBfZGV2aWNlIHsKICAgICBzdHJ1Y3QgbWlwaV9kYmlfZGV2aWNlIGRiaTsK ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7CiAgICAgc3RydWN0IGdwaW9fZGVzYyAqY3M7CiAgICAg c3RydWN0IGdwaW9fZGVzYyAqZGM7CiAgICAgc3RydWN0IGdwaW9fZGVzYyAqd3I7CiAgICAgc3Ry dWN0IGdwaW9fZGVzY3MgKmRiOwp9OwoKLyoqCiAgKiBtaXBpX2RiaV9nZXRfc3dhcDE2IC0gSXMg Ynl0ZXN3YXBwaW5nIDE2LWJpdCBwaXhlbCBkYXRhIG5lZWRlZD8KICAqIEBkYmk6IE1JUEkgREJJ IGRldmljZQogICoKICAqIEJ5dGUgc3dhcHBpbmcgMTYtYml0IHBpeGVsIGRhdGEgaXMgbmVjZXNz YXJ5IGlmIHRoZSBidXMgY2FuJ3QgCnN1cHBvcnQgMTYtYml0CiAgKiBiaWcgZW5kaWFuIHRyYW5z ZmVycyAoZS5nLiBpZiBTUEkgY2FuIG9ubHkgZG8gOC1iaXQgYW5kIHRoZSBtYWNoaW5lIGlzCiAg KiBsaXR0bGUgZW5kaWFuKS4gVGhpcyBhcHBsaWVzIHRvIHRoZSBNSVBJX0RDU19XUklURV9NRU1P UllfU1RBUlQgY29tbWFuZC4KICAqCiAgKiBSZXR1cm5zOgogICogVHJ1ZSBpZiBpdCdzIG5lY2Nl c2FyeSB0byBzd2FwIGJ5dGVzLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KYm9vbCBtaXBpX2RiaV9n ZXRfc3dhcDE2KHN0cnVjdCBtaXBpX2RiaV9kZXZpY2UgKmRiaSkKewogICAgIHJldHVybiBkYmkt PnN3YXAxNjsKfQoKLyoqCiAgKiBtaXBpX2RiaV9zcGlfaW5pdCAtIEluaXRpYWxpemUgTUlQSSBE QkkgU1BJIGRldmljZQogICogQHNwaTogU1BJIGRldmljZQogICogQGRjOiBEL0MgZ3BpbyAob3B0 aW9uYWwpCiAgKiBAd3JpdGVvbmx5OiBUcnVlIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlYWQg ZnJvbSB0aGUgY29udHJvbGxlci4KICAqCiAgKiBJZiBAZGMgaXMgc2V0LCBhIFR5cGUgQyBPcHRp b24gMyBpbnRlcmZhY2UgaXMgYXNzdW1lZCwgaWYgbm90CiAgKiBUeXBlIEMgT3B0aW9uIDEgKDkt Yml0KS4KICAqCiAgKiBJZiB0aGUgU1BJIG1hc3RlciBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IHRo ZSBuZWNlc3NhcnkgYml0cyBwZXIgd29yZCwKICAqIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRp b24gaXMgdXNlZDoKICAqCiAgKiAtIDktYml0OiByZW9yZGVyIGJ1ZmZlciBhcyA5eCA4LWJpdCB3 b3JkcywgcGFkZGVkIHdpdGggbm8tb3AgY29tbWFuZC4KICAqIC0gMTYtYml0IChwaXhlbCBkYXRh KTogaWYgbWFjaGluZSBpcyBiaWcgZW5kaWFuIHNlbmQgYXMgOC1iaXQsIGlmIGxpdHRsZQogICog ICBlbmRpYW4gdGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIHN3YXBwaW5nIHRoZSBieXRlcy4K ICAqICAgU2VlIG1pcGlfZGJpX2dldF9zd2FwX3BpeGVsX2J5dGVzKCkuCiAgKgogICogUmV0dXJu czoKICAqIFBvaW50ZXIgdG8gJm1pcGlfZGJpX2RldmljZSBvbiBzdWNjZXNzLCBFUlJfUFRSIG9u IGZhaWx1cmUuCiAgKi8Kc3RydWN0IG1pcGlfZGJpX2RldmljZSAqbWlwaV9kYmlfc3BpX2luaXQo c3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3Bp b19kZXNjICpkYywgYm9vbCB3cml0ZW9ubHkpCnsKLi4uCn0KCnN0cnVjdCBtaXBpX2RiaV9kZXZp Y2UgKm1pcGlfZGJpX2k4MF9pbml0KC4uLikKCgpOb3JhbGYuCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK