From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753071AbeDSJes (ORCPT ); Thu, 19 Apr 2018 05:34:48 -0400 Received: from mirror2.csie.ntu.edu.tw ([140.112.30.76]:35662 "EHLO wens.csie.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752777AbeDSJce (ORCPT ); Thu, 19 Apr 2018 05:32:34 -0400 From: Chen-Yu Tsai To: Maxime Ripard , David Airlie , Thierry Reding , Rob Herring , Mark Rutland Cc: Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Jonathan Liu Subject: [PATCH 1/6] drm/sun4i: tcon: Pass drm_encoder * into sun4i_tcon0_mode_set_cpu Date: Thu, 19 Apr 2018 17:32:20 +0800 Message-Id: <20180419093225.614-2-wens@csie.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180419093225.614-1-wens@csie.org> References: <20180419093225.614-1-wens@csie.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org sun4i_tcon0_mode_set_cpu() currently accepts struct mipi_dsi_device * as its second parameter. This is derived from drm_encoder. The DSI encoder is tied to the CPU interface mode of the TCON as a special case. In theory, if hardware were available, we could also support normal CPU interface modes. It is better to pass the generic encoder instead of the specialized mipi_dsi_device, and handle the differences inside the function. Passing the encoder would also enable the function to pass it, or any other data structures related to it, to other functions expecting it. One such example would be dithering support that will be added in a later patch, which looks at properties tied to the connector to determine whether dithering should be enabled or not. Signed-off-by: Chen-Yu Tsai --- drivers/gpu/drm/sun4i/sun4i_tcon.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c index 08747fc3ee71..2bd53ef7d4b8 100644 --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c @@ -277,9 +277,12 @@ static void sun4i_tcon0_mode_set_common(struct sun4i_tcon *tcon, } static void sun4i_tcon0_mode_set_cpu(struct sun4i_tcon *tcon, - struct mipi_dsi_device *device, + struct drm_encoder *encoder, const struct drm_display_mode *mode) { + /* TODO support normal CPU interface modes */ + struct sun6i_dsi *dsi = encoder_to_sun6i_dsi(encoder); + struct mipi_dsi_device *device = dsi->device; u8 bpp = mipi_dsi_pixel_format_to_bpp(device->format); u8 lanes = device->lanes; u32 block_space, start_delay; @@ -606,16 +609,10 @@ void sun4i_tcon_mode_set(struct sun4i_tcon *tcon, const struct drm_encoder *encoder, const struct drm_display_mode *mode) { - struct sun6i_dsi *dsi; - switch (encoder->encoder_type) { case DRM_MODE_ENCODER_DSI: - /* - * This is not really elegant, but it's the "cleaner" - * way I could think of... - */ - dsi = encoder_to_sun6i_dsi(encoder); - sun4i_tcon0_mode_set_cpu(tcon, dsi->device, mode); + /* DSI is tied to special case of CPU interface */ + sun4i_tcon0_mode_set_cpu(tcon, encoder, mode); break; case DRM_MODE_ENCODER_LVDS: sun4i_tcon0_mode_set_lvds(tcon, encoder, mode); -- 2.17.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chen-Yu Tsai Subject: [PATCH 1/6] drm/sun4i: tcon: Pass drm_encoder * into sun4i_tcon0_mode_set_cpu Date: Thu, 19 Apr 2018 17:32:20 +0800 Message-ID: <20180419093225.614-2-wens@csie.org> References: <20180419093225.614-1-wens@csie.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180419093225.614-1-wens@csie.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maxime Ripard , David Airlie , Thierry Reding , Rob Herring , Mark Rutland Cc: devicetree@vger.kernel.org, Jonathan Liu , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Chen-Yu Tsai , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org c3VuNGlfdGNvbjBfbW9kZV9zZXRfY3B1KCkgY3VycmVudGx5IGFjY2VwdHMgc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqCmFzIGl0cyBzZWNvbmQgcGFyYW1ldGVyLiBUaGlzIGlzIGRlcml2ZWQgZnJv bSBkcm1fZW5jb2Rlci4KClRoZSBEU0kgZW5jb2RlciBpcyB0aWVkIHRvIHRoZSBDUFUgaW50ZXJm YWNlIG1vZGUgb2YgdGhlIFRDT04gYXMgYQpzcGVjaWFsIGNhc2UuIEluIHRoZW9yeSwgaWYgaGFy ZHdhcmUgd2VyZSBhdmFpbGFibGUsIHdlIGNvdWxkIGFsc28Kc3VwcG9ydCBub3JtYWwgQ1BVIGlu dGVyZmFjZSBtb2Rlcy4gSXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlIGdlbmVyaWMKZW5jb2RlciBp bnN0ZWFkIG9mIHRoZSBzcGVjaWFsaXplZCBtaXBpX2RzaV9kZXZpY2UsIGFuZCBoYW5kbGUgdGhl CmRpZmZlcmVuY2VzIGluc2lkZSB0aGUgZnVuY3Rpb24uCgpQYXNzaW5nIHRoZSBlbmNvZGVyIHdv dWxkIGFsc28gZW5hYmxlIHRoZSBmdW5jdGlvbiB0byBwYXNzIGl0LCBvciBhbnkKb3RoZXIgZGF0 YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gaXQsIHRvIG90aGVyIGZ1bmN0aW9ucyBleHBlY3Rpbmcg aXQuCk9uZSBzdWNoIGV4YW1wbGUgd291bGQgYmUgZGl0aGVyaW5nIHN1cHBvcnQgdGhhdCB3aWxs IGJlIGFkZGVkIGluIGEKbGF0ZXIgcGF0Y2gsIHdoaWNoIGxvb2tzIGF0IHByb3BlcnRpZXMgdGll ZCB0byB0aGUgY29ubmVjdG9yIHRvCmRldGVybWluZSB3aGV0aGVyIGRpdGhlcmluZyBzaG91bGQg YmUgZW5hYmxlZCBvciBub3QuCgpTaWduZWQtb2ZmLWJ5OiBDaGVuLVl1IFRzYWkgPHdlbnNAY3Np ZS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24uYyB8IDE1ICsrKysr Ky0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5jIGIvZHJp dmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24uYwppbmRleCAwODc0N2ZjM2VlNzEuLjJiZDUz ZWY3ZDRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24uYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5jCkBAIC0yNzcsOSArMjc3LDEy IEBAIHN0YXRpYyB2b2lkIHN1bjRpX3Rjb24wX21vZGVfc2V0X2NvbW1vbihzdHJ1Y3Qgc3VuNGlf dGNvbiAqdGNvbiwKIH0KIAogc3RhdGljIHZvaWQgc3VuNGlfdGNvbjBfbW9kZV9zZXRfY3B1KHN0 cnVjdCBzdW40aV90Y29uICp0Y29uLAotCQkJCSAgICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZGV2aWNlLAorCQkJCSAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgICAg Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJLyogVE9ETyBzdXBwb3J0 IG5vcm1hbCBDUFUgaW50ZXJmYWNlIG1vZGVzICovCisJc3RydWN0IHN1bjZpX2RzaSAqZHNpID0g ZW5jb2Rlcl90b19zdW42aV9kc2koZW5jb2Rlcik7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZGV2aWNlID0gZHNpLT5kZXZpY2U7CiAJdTggYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3Rv X2JwcChkZXZpY2UtPmZvcm1hdCk7CiAJdTggbGFuZXMgPSBkZXZpY2UtPmxhbmVzOwogCXUzMiBi bG9ja19zcGFjZSwgc3RhcnRfZGVsYXk7CkBAIC02MDYsMTYgKzYwOSwxMCBAQCB2b2lkIHN1bjRp X3Rjb25fbW9kZV9zZXQoc3RydWN0IHN1bjRpX3Rjb24gKnRjb24sCiAJCQkgY29uc3Qgc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQogewotCXN0cnVjdCBzdW42aV9kc2kgKmRzaTsKLQogCXN3aXRjaCAoZW5jb2Rlci0+ ZW5jb2Rlcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9FTkNPREVSX0RTSToKLQkJLyoKLQkJICog VGhpcyBpcyBub3QgcmVhbGx5IGVsZWdhbnQsIGJ1dCBpdCdzIHRoZSAiY2xlYW5lciIKLQkJICog d2F5IEkgY291bGQgdGhpbmsgb2YuLi4KLQkJICovCi0JCWRzaSA9IGVuY29kZXJfdG9fc3VuNmlf ZHNpKGVuY29kZXIpOwotCQlzdW40aV90Y29uMF9tb2RlX3NldF9jcHUodGNvbiwgZHNpLT5kZXZp Y2UsIG1vZGUpOworCQkvKiBEU0kgaXMgdGllZCB0byBzcGVjaWFsIGNhc2Ugb2YgQ1BVIGludGVy ZmFjZSAqLworCQlzdW40aV90Y29uMF9tb2RlX3NldF9jcHUodGNvbiwgZW5jb2RlciwgbW9kZSk7 CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfRU5DT0RFUl9MVkRTOgogCQlzdW40aV90Y29uMF9t b2RlX3NldF9sdmRzKHRjb24sIGVuY29kZXIsIG1vZGUpOwotLSAKMi4xNy4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: wens@csie.org (Chen-Yu Tsai) Date: Thu, 19 Apr 2018 17:32:20 +0800 Subject: [PATCH 1/6] drm/sun4i: tcon: Pass drm_encoder * into sun4i_tcon0_mode_set_cpu In-Reply-To: <20180419093225.614-1-wens@csie.org> References: <20180419093225.614-1-wens@csie.org> Message-ID: <20180419093225.614-2-wens@csie.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org sun4i_tcon0_mode_set_cpu() currently accepts struct mipi_dsi_device * as its second parameter. This is derived from drm_encoder. The DSI encoder is tied to the CPU interface mode of the TCON as a special case. In theory, if hardware were available, we could also support normal CPU interface modes. It is better to pass the generic encoder instead of the specialized mipi_dsi_device, and handle the differences inside the function. Passing the encoder would also enable the function to pass it, or any other data structures related to it, to other functions expecting it. One such example would be dithering support that will be added in a later patch, which looks at properties tied to the connector to determine whether dithering should be enabled or not. Signed-off-by: Chen-Yu Tsai --- drivers/gpu/drm/sun4i/sun4i_tcon.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c index 08747fc3ee71..2bd53ef7d4b8 100644 --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c @@ -277,9 +277,12 @@ static void sun4i_tcon0_mode_set_common(struct sun4i_tcon *tcon, } static void sun4i_tcon0_mode_set_cpu(struct sun4i_tcon *tcon, - struct mipi_dsi_device *device, + struct drm_encoder *encoder, const struct drm_display_mode *mode) { + /* TODO support normal CPU interface modes */ + struct sun6i_dsi *dsi = encoder_to_sun6i_dsi(encoder); + struct mipi_dsi_device *device = dsi->device; u8 bpp = mipi_dsi_pixel_format_to_bpp(device->format); u8 lanes = device->lanes; u32 block_space, start_delay; @@ -606,16 +609,10 @@ void sun4i_tcon_mode_set(struct sun4i_tcon *tcon, const struct drm_encoder *encoder, const struct drm_display_mode *mode) { - struct sun6i_dsi *dsi; - switch (encoder->encoder_type) { case DRM_MODE_ENCODER_DSI: - /* - * This is not really elegant, but it's the "cleaner" - * way I could think of... - */ - dsi = encoder_to_sun6i_dsi(encoder); - sun4i_tcon0_mode_set_cpu(tcon, dsi->device, mode); + /* DSI is tied to special case of CPU interface */ + sun4i_tcon0_mode_set_cpu(tcon, encoder, mode); break; case DRM_MODE_ENCODER_LVDS: sun4i_tcon0_mode_set_lvds(tcon, encoder, mode); -- 2.17.0