From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752761AbdDNI06 (ORCPT ); Fri, 14 Apr 2017 04:26:58 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:53170 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751530AbdDNI0x (ORCPT ); Fri, 14 Apr 2017 04:26:53 -0400 X-AuditID: cbfec7f1-f796e6d00000116b-36-58f087c9e68c Subject: Re: [PATCH 2/3] drm/panel: s6e3ha2: Add support for S6eHEA2 edge panel on TM2e board To: Hoegeun Kwon , thierry.reding@gmail.com, airlied@linux.ie, robh+dt@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, kgene@kernel.org, krzk@kernel.org Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, javier@osg.samsung.com, andi.shyti@samsung.com From: Andrzej Hajda Message-id: <5ea68f29-69d5-f1e3-9ffc-646449033989@samsung.com> Date: Fri, 14 Apr 2017 10:26:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-version: 1.0 In-reply-to: <1492147179-7824-3-git-send-email-hoegeun.kwon@samsung.com> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA01Sa0hTYRj2O7cdV6vTXPahprWKUtO0+nFIkaSk0x8p/LMSspGnaXljR0WL UBDLS6mopAzRiqblBW0zNdOQOZ0X8JLmMvCCguCtqbNSadq2k+C/53mf5/ne7/n4SFQ8iruQ 0XGJrDJOHiMlhFhT9+aAT++zFZnfcoMz/WKgF6Gb9XM4bap8DugK/QBOj/4yEbSpKoegl5Zr ETp/dhGlBwcbBLRmdgynR1rLCLp08AtCq43DCJ3ZrhfQm63lGD2/2oNdppja8lrAfFJNCBhN dTbBNP+expmpXAPCaN+mMY351nleYzVgzBr3G463hYGRbEx0Mqs8F3RXGNVcmUUk/PFM0WlP poPh4znAkYTURdjUtgF47AyHJuuJHCAkxZQawA9D0whPzABaJsaQ3YRhJwvlhUoAzRkLgCdz VlJRR9hcTlQEnGiZx2yChPoOYFX9ov1glPoBYF5GIWpzEZQntGjH7QkRFQSn1Tv2OUadgiMZ BQIbPkzJoLGsEfCeQ3CjaBKzYUeKgX3vOu1ZlPKDpcWdCI89oLZ22X4/SGWT0PhzwhogreQo 1HSgfIercGlQRfDYCS4YGgU8doMjRbkYn80FcC2/R8CTYgC3V0r/pwNgp2EY57cdgIVNJSi/ QASznop5CwMtC2sYj4PhVEYNzr/ROIClRV+RAuCh2lNItaeEak+JVwCtBhI2iYtVsNx5X04e yyXFKXzvxcdqgPWv9W8bVluAqeeSDlAkkO4XyZ6YZGJcnsylxuoAJFGpRNSftiITiyLlqY9Y ZXyEMimG5XTAlcSkR0TCvjGZmFLIE9mHLJvAKndVhHR0SQfui8c4Z27jIKm0ZDPO6eurBVHb ljAy2qzGH2uDrrRJUtRVeQ5bN/3bT4QwNS9vhYY7zOS87nWTX9D7bJ0OXnPvWHdFtvd1iSvy Ali96zfvkkCJb3foGa+s95+NIZnFf7uuh92v93pwx3NmI7ycFJ8lP+7UXWvwnnqjUM/kL29J MS5K7u+FKjn5P0oK81dnAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrAIsWRmVeSWpSXmKPExsVy+t/xK7r32z9EGKzdIWDRe+4kk8X2I89Y Ld4v62G0mH/kHKvFla/v2SzeL+9is3jzdg2TRf/j18wW589vYLfY9Pgaq8XlXXPYLGac38dk sfT6RSaL1r1H2C1+7prHYvHy4wkWBwGPNfPWMHrsnHWX3WPTqk42j+3fHrB63O8+zuSxeUm9 x5Z+oHjfllWMHp83yQVwRrnZZKQmpqQWKaTmJeenZOal2yqFhrjpWigp5CXmptoqRej6hgQp KZQl5pQCeUYGaMDBOcA9WEnfLsEtY/uyDraC75oVhzarNDBeVOxi5OSQEDCROP6/gxnCFpO4 cG89WxcjF4eQwBJGiX+Pn7FAOM8YJS5t38/axcjBISwQL7HnnwRIXETgGqPErFULGCGKbjJK vNq/C8xhFrjFKPG1fTnYXDYBTYm/m2+ygdi8AnYSD5b+B4uzCKhKXG6ewA5iiwpESDzs3MUO USMo8WPyPRYQm1PAQ+LUisNsIJuZBfQk7l/UAgkzC8hLbF7zlnkCo8AsJB2zEKpmIalawMi8 ilEktbQ4Nz232EivODG3uDQvXS85P3cTIzC2tx37uWUHY9e74EOMAhyMSjy8G+rfRwixJpYV V+YeYpTgYFYS4T1d/yFCiDclsbIqtSg/vqg0J7X4EKMp0AsTmaVEk/OBaSevJN7QxNDc0tDI 2MLC3MhISZx36ocr4UIC6YklqdmpqQWpRTB9TBycUg2MfYe9bec3mhz+x3LwSfKRPZxT1sz5 bHySabHconPPP/1nPdCpZuhxvv5091qf+1W+S8yiXsc+eLRDme9l6GPTtRMZ9OY2L3otJ/FK 9MhD/7T/zUZP1voce/igkafm8Nnlzhuc7xqrqs3ucTw8Ub3Yj3NGjNba3pjfq2RNXh7VLfgg Ue4sOi0wVomlOCPRUIu5qDgRADpvGqUDAwAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170414082648eucas1p1a1d183ab442cef10ca31a3f5a751ba24 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRvsgrw=?= =?UTF-8?B?7ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRtTYW1z?= =?UTF-8?B?dW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170414051959epcas5p338f72abbf841233f6f1f0a240df2a1e9 X-RootMTR: 20170414051959epcas5p338f72abbf841233f6f1f0a240df2a1e9 References: <1492147179-7824-1-git-send-email-hoegeun.kwon@samsung.com> <1492147179-7824-3-git-send-email-hoegeun.kwon@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Hoegeun, The patch looks OK, below small nitpicks. On 14.04.2017 07:19, Hoegeun Kwon wrote: > This patch considers edge type of panel on TM2e board and The panel > has 1600x2560 resolution in 5.65" physical panel in the TM2e device. > > This identify panel type with compatibility string, also invoke > display mode that matches the type. So add the check code for default > compatibility and edge type and select the drm_display_mode of default > and edge type. > > Signed-off-by: Hoegeun Kwon > --- > drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c | 62 ++++++++++++++++++++++++--- > 1 file changed, 56 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c b/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c > index 4cc08d7..b4a064a 100644 > --- a/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c > +++ b/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c > @@ -16,6 +16,7 @@ > #include > #include > #include > +#include > #include > > #define S6E3HA2_MIN_BRIGHTNESS 0 > @@ -218,6 +219,16 @@ > 0x1d, 0x1e, 0x1f, 0x20, 0x21 > }; > > +enum s6e3ha2_type { > + DEFAULT_TYPE, > + EDGE_TYPE, > +}; I am not sure if default is the best name, it suggest some hierarchy which is not true. Also edge does not fit here well, it is just buzzword used for marketing. Alternative enums: - S6E3HA2_TYPE, S6E3HF2_TYPE, quite long, hard to catch difference, but consistent with compatibles, - HA2_TYPE, HF2_TYPE - shorter, more readable version, - QHD_TYPE, WQXGA_TYPE - to empahsize resolutions. > + > +struct s6e3ha2_panel_desc { > + const struct drm_display_mode *mode; > + enum s6e3ha2_type type; > +}; > + > struct s6e3ha2 { > struct device *dev; > struct drm_panel panel; > @@ -226,6 +237,8 @@ struct s6e3ha2 { > struct regulator_bulk_data supplies[2]; > struct gpio_desc *reset_gpio; > struct gpio_desc *enable_gpio; > + > + const struct s6e3ha2_panel_desc *desc; > }; > > static int s6e3ha2_dcs_write(struct s6e3ha2 *ctx, const void *data, size_t len) > @@ -283,11 +296,19 @@ static int s6e3ha2_single_dsi_set(struct s6e3ha2 *ctx) > static int s6e3ha2_freq_calibration(struct s6e3ha2 *ctx) > { > s6e3ha2_dcs_write_seq_static(ctx, 0xfd, 0x1c); > + if (ctx->desc->type == EDGE_TYPE) > + s6e3ha2_dcs_write_seq_static(ctx, 0xf2, 0x67, 0x40, 0xc5); > s6e3ha2_dcs_write_seq_static(ctx, 0xfe, 0x20, 0x39); > s6e3ha2_dcs_write_seq_static(ctx, 0xfe, 0xa0); > s6e3ha2_dcs_write_seq_static(ctx, 0xfe, 0x20); > - s6e3ha2_dcs_write_seq_static(ctx, 0xce, 0x03, 0x3b, 0x12, 0x62, 0x40, > - 0x80, 0xc0, 0x28, 0x28, 0x28, 0x28, 0x39, 0xc5); > + > + if (ctx->desc->type == DEFAULT_TYPE) > + s6e3ha2_dcs_write_seq_static(ctx, 0xce, 0x03, 0x3b, 0x12, 0x62, > + 0x40, 0x80, 0xc0, 0x28, 0x28, 0x28, 0x28, 0x39, 0xc5); > + else > + s6e3ha2_dcs_write_seq_static(ctx, 0xce, 0x03, 0x3b, 0x14, 0x6d, > + 0x40, 0x80, 0xc0, 0x28, 0x28, 0x28, 0x28, 0x39, 0xc5); > + > return 0; > } > > @@ -597,16 +618,41 @@ static int s6e3ha2_enable(struct drm_panel *panel) > .flags = 0, > }; > > +static const struct s6e3ha2_panel_desc samsung_s6e3ha2_tm2 = { Please do not use tm2/tm2e here and later, they have nothing to do with the panel. > + .mode = &default_mode, > + .type = DEFAULT_TYPE, > +}; > + > +static const struct drm_display_mode edge_mode = { > + .clock = 247856, > + .hdisplay = 1600, > + .hsync_start = 1600 + 1, > + .hsync_end = 1600 + 1 + 1, > + .htotal = 1600 + 1 + 1 + 1, > + .vdisplay = 2560, > + .vsync_start = 2560 + 1, > + .vsync_end = 2560 + 1 + 1, > + .vtotal = 2560 + 1 + 1 + 15, > + .vrefresh = 60, > + .flags = 0, > +}; > + > +static const struct s6e3ha2_panel_desc samsung_s6e3ha2_tm2e = { > + .mode = &edge_mode, > + .type = EDGE_TYPE, > +}; > + > static int s6e3ha2_get_modes(struct drm_panel *panel) > { > struct drm_connector *connector = panel->connector; > + struct s6e3ha2 *ctx = container_of(panel, struct s6e3ha2, panel); > struct drm_display_mode *mode; > > - mode = drm_mode_duplicate(panel->drm, &default_mode); > + mode = drm_mode_duplicate(panel->drm, ctx->desc->mode); > if (!mode) { > DRM_ERROR("failed to add mode %ux%ux@%u\n", > - default_mode.hdisplay, default_mode.vdisplay, > - default_mode.vrefresh); > + ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay, > + ctx->desc->mode->vrefresh); > return -ENOMEM; > } > > @@ -642,6 +688,7 @@ static int s6e3ha2_probe(struct mipi_dsi_device *dsi) > mipi_dsi_set_drvdata(dsi, ctx); > > ctx->dev = dev; > + ctx->desc = of_device_get_match_data(dev); > > dsi->lanes = 4; > dsi->format = MIPI_DSI_FMT_RGB888; > @@ -717,7 +764,10 @@ static int s6e3ha2_remove(struct mipi_dsi_device *dsi) > } > > static const struct of_device_id s6e3ha2_of_match[] = { > - { .compatible = "samsung,s6e3ha2" }, > + { .compatible = "samsung,s6e3ha2", > + .data = &samsung_s6e3ha2_tm2 }, > + { .compatible = "samsung,s6e3ha2-e", > + .data = &samsung_s6e3ha2_tm2e }, And please use compatible "samsung,s6e3hf2". Regards Andrzej > { } > }; > MODULE_DEVICE_TABLE(of, s6e3ha2_of_match);