Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752758AbdGDKj0 (ORCPT ); Tue, 4 Jul 2017 06:39:26 -0400 Received: from mail-he1eur01on0125.outbound.protection.outlook.com ([104.47.0.125]:18689 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752437AbdGDKgd (ORCPT ); Tue, 4 Jul 2017 06:36:33 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; From: Peter Rosin To: linux-kernel@vger.kernel.org Cc: Peter Rosin , Daniel Vetter , Jani Nikula , Sean Paul , David Airlie , dri-devel@lists.freedesktop.org, Boris Brezillon Subject: [PATCH v3 05/16] drm/fb-helper: do a generic fb_setcmap helper in terms of crtc .gamma_set Date: Tue, 4 Jul 2017 12:37:01 +0200 Message-Id: <1499164632-5582-6-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1499164632-5582-1-git-send-email-peda@axentia.se> References: <1499164632-5582-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [81.224.171.159] X-ClientProxiedBy: AM5PR0201CA0002.eurprd02.prod.outlook.com (2603:10a6:203:3d::12) To HE1PR0202MB2555.eurprd02.prod.outlook.com (2603:10a6:3:90::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 33c3322e-21b5-4926-9f4b-08d4c2c883d0 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:HE1PR0202MB2555; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;3:MaCXwB85YOhE/Nm6hJCjyYJcYFlJ79GHqvDHXWamrKMonISdj3l5pa0L1CZbzmg6M2Wf6ZorYLbcC+Y08flo58L6WTf4EcM/gRfGEH6iHTKG97uhsaX7lsR3n9t/Jxm9c9bmKVtZT0eRmxzB4gMW6ifV53byZcU783dotJTp7UvoP3QMZg3fX5VzNURNcrsHRmYrDdfAJ1TATC1K9IlhbOqZYgSPSWBF63sxkMCKAhCAy/ChDBrVO5fvrdj+Yv9VF6kI5Tzxg195yXaIzigr/8p9oCSmoJQYWMynjNqr4fVz8VqayfGc26Izih8c43sjDDt5s+AtM72lIqsKBxOIC1FWmVW/35Kw1dAtVJU7eKMjAlS92eS5mIMJg8Ha+A037ALUQvaQztUPitFK7YEnhZxGi688aon0/D+rPp0ZeDOD2dQklK5XwEYKKMEP7ZOJKfA/Rm4gknflw95a87+Pt4TEYOj8U+ZwJzArYco2FkzFrWe6AYnh2NqskMnIN9wIb3vKkeBEDJTPupBAgRvqa9RmPRG6rk/oKnzkYpY5eEWa0wMk1VZL6wrgwL4rZd8H7HZ8hdwhffQ2HKNWZhlCc60cd1uRtDkY3qNyqg0dN+JMmv8+8mfdrrrkY1tnlFWauptMl99mWNDCh5DwJkVlFDhMzp8Fdh4si1/+t9BnW20BGcnUr1guIYaKv/csZJ+UtbkbI7ij4xo4FJwpgYDxJA== X-MS-TrafficTypeDiagnostic: HE1PR0202MB2555: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;25:QOmshNDxsh9B8PKfAfDrQPrCu8bcFmSoU8Bi43NfCU3Qom9AQJ/cUFuhr67oF2BgfecbLIfztNN1EXseunEyjuuzuAmY1dNLfe4UhArMYbui23TSkGR5ZjIWSu7lPNJcyDIXrU2x0bjD8l/7VJAu83aCjlH/trFIvHur4ud5okev7LdqZZN9380DHrF44jHGWe5EGckorzM77nooKZC7IO7nRMzvX1fKiiNsnYV+code8mJtCZB66GOn3w8RUcgnvm/SL89TDCvAoLffDOv6YSs6LRRBE/nJzJxEnpUXO7EnbK0Klhr4COSGrZ3BjWEboeaQJ6mdNTGgAEJLx8SLDtXrQJbmIZS9a+RDoWdFAM2GVr9ZMiew9g+gPBMdqzCm3d96Woc6PVkLSnOHIiMz6dJC5iTe6qMuP7Cmqtvs+4NRGhzhWyl5/+j7hYRI6wmKfq9hDWkc7/7R5z6G44est6Py4iNgnDBzdX2zz+cN0VXL1AJSZX3jIxLqRVJLcPb9qAzgyphtiaUlGW46C7N1erSFMvMIFyTDLnd8Mrs94JE3GX6xxCaCEybRTXvbS3ICbF2IXv1WmZqaNQTh+YNohpo6z3jHcxdRx/y1BuV0+UIyhri/uJw4fJAzbeh3qO/T2xb6Es4RCCDDB0bCJ6IRZ7JQdWUBtnMwn8drL7wVaLo7EKBFEhhmmj7YWP2JsNWJzF6rSCrRL3nS/fTE4kKN2CpgYaMYrsJzJHysdjab1YogyMErpHEVssK0YDORViiATjzECn1v0xUzlFhsz4SzE68e4fE89Uk1OYDJsgwakNyES/wRzFZFIXocj8QIZ4IZlcgK7lwpJnNw1WR0nvZHxfGa0UkaCuXVGBEM/rwagI3JbkofDH4i2c0cDHGmqWv7hXYqUEzhKxTOEbux8MIxeqbcww+KBFt/9Eo4xIfdhKk= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;31:f+qaZrgFqZflBvGEhjHgdmNpP2daIzSFoihqaHbzXCtdPBQVdJcy6dxq/1DXBSlaSDDE79fUPOjoh+mdD9hLO12IiX+A5+neDsUhybvag+0WZqglQvvia+tA51mAQ3FLi6rwnjQQsP0yYAq1h5Ek0vUARdt+4WHv3Gr2wKJoKAO94Azv5ag2vHtHSt+u3GmdZESRAkHVvqt83z9Wd9FTu3sG8Ppk9B6rbXSzI8n6YNGZYRT60+FSDJ9ETPfIhkyvX6zzpXuA1JJ3mkAhX6tdHjaUeFwvzWT5yIgqV+zKAdLYdKXep+KCUJatGe1JWCL5TxJwuDhbsQyJ/zPnZw+jc2OQyxGvCAf0szb9StjoBNlsRWW34nT6V8jNcqbDj5JfPwieLHfgcO+rnpdiZyM7RV1/0ERMkdXuVTR7Qge3o56tqFm8jfr1W7RSRxAMSEsTqtYuu0+OgPMrb7CaxZYgG5r6KJJegiLDPXgccO/X8PcL3D5nclq7dd2ILYQYg4mj27bx9IbrU1UNL6n8eiKrdYv9cK1rNpqsbAv6tTpvn3J2HU80tfNc2WlhSm8bT/HPPr9VnH7012Ea33Ex+FmKpDXbWGohX4GRyLq/n6LWWPLZoc45WkAL3Xn4slVp/BzOEGwYxj1nKmQh+j+RhVEG4HxyryNbdwMOpXJczhuPEDE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(100000703101)(100105400095)(6041248)(2016111802025)(20161123558100)(20161123562025)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6043046)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0202MB2555;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0202MB2555; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0202MB2555;4:KrfGCdNX/0U4HofNqxXpM4KV1PnNebSYwrzo8MV5?= =?us-ascii?Q?g7Dz5fztSw0JrvDt6GXMwlAh3oxepP99BIFyoYfIUdU7m/7KNRBXyuqdtFWm?= =?us-ascii?Q?YMumXCe/GN9oBb+sFJw2kPZHuvF8vvWwjFVeZhMN6JwItC4p5kNViRoa12Xn?= =?us-ascii?Q?fLsQYzFdeko2WkFnkWAUcJHf5xFm6LHF8QHOG9HZIKRiLoqeCu4xCTf9CR5s?= =?us-ascii?Q?W8cTGInMa3bWf6wjmeSKry9fGKTA3J/wF/xYOnJMvzeHKnBresgBWqnwqOc6?= =?us-ascii?Q?gf9tI0fAhcyQejF9ZxsmhUejDVR3uADqivtXe0bLVfsC/eg7VRL1lv1IIuA6?= =?us-ascii?Q?JHDyIeF34jIDOF7M8aeNKpcWvN7um49oYdC1Ii2CmHPjPcS9Mr9ZCoObgM4r?= =?us-ascii?Q?UPSD1d2qxkp/iOlt00kvhbdYyAIK0TfjfatHCbz8j72d0gyKjC7P1B/B9jJz?= =?us-ascii?Q?tn60w21nKGUB7GsNyaKC2WZ1jM045EC4xWzl3rvDsZzmd7FNBxtMtA6U89lK?= =?us-ascii?Q?u59RpqWwMXqPIgFtP2VbB8nEtVoleGiUsh0SgM6C/oea7vPEDf59F+r4Qv8k?= =?us-ascii?Q?j1b5soV8J2vH12L2GrIoC2Hn/C/nNOfqhNdmPLyIgftjVeePGdt4YsLNs+iI?= =?us-ascii?Q?tFLqnomYZGakXPWVOoCJn0MTEkV+ByD5L3Cj7Ofm5gD5umaTZNYZiw1Hie4M?= =?us-ascii?Q?NCEyuGZTh6F4VTJcCpjLQhnXq1F1z+MGqM+wAEQCIqpeRcVklQBhcG61bFyH?= =?us-ascii?Q?pj/fTG28EGY6RgkKyf10kXFNLfqBCS9rA9SZaEQUTzyWpNxr0xXKuOncSvnO?= =?us-ascii?Q?9IwOW88/z/B6WOnBSAYRJterjya5W8tomnRemJvNOKTERgU7yoVvIG2O+nZd?= =?us-ascii?Q?5FmHTCj36hygPCJzeB5TECoPAHwl+E5oFRTct3oRcd4uxqa3AqP0imdFDIxp?= =?us-ascii?Q?cu2c76zmG6D0Imtg2Hwj+yF/7E5Pw7klViUF2LT+66wNie2WDMTuqigbzoxl?= =?us-ascii?Q?AXwegyeAuMfYbaXMkWdxqo0Sa7pUPQmZhclfKN/evD2mhk4tWdC16w0aG9U6?= =?us-ascii?Q?6ZFJx0EiGHeH54++ARLjAffXXe8uILHEUas6WWCO24uYFJtQX07duE78E773?= =?us-ascii?Q?9GG9k2+h/5EdCJCnco17NGsmYqyx/XcYNeVVkIa5vjlaibXFLGbJDhE5Kfsh?= =?us-ascii?Q?5g7urhHqElfP5ef5cxjjZMUcT0GBUvkqKTO0Tj0sfVENXVdMyW0V6ITbRsfY?= =?us-ascii?Q?KjLu+C777lWN9mBzzDQ=3D?= X-Forefront-PRVS: 0358535363 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(979002)(6009001)(39840400002)(39400400002)(39410400002)(39450400003)(8676002)(81166006)(7736002)(47776003)(81156014)(189998001)(97736004)(3846002)(36756003)(305945005)(50466002)(6116002)(48376002)(50226002)(53936002)(86362001)(33646002)(66066001)(2906002)(478600001)(42186005)(2361001)(74482002)(2351001)(38730400002)(110136004)(4326008)(25786009)(6506006)(6512007)(54906002)(5003940100001)(21086003)(6486002)(6916009)(5660300001)(6666003)(2950100002)(50986999)(76176999)(41533002)(142923001)(42262002)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0202MB2555;H:orc.lan;FPR:;SPF:None;MLV:ovrnspm;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0202MB2555;23:/+Ze1gWqUkUJaY5LVGh2HM11/i7G2aXgKz3YhN+?= =?us-ascii?Q?03sdlzqF0Si7yRyFJZmU3+NkFYEakrs9og2nzTvP28+efzQ4NTWd41md6c7N?= =?us-ascii?Q?z2uUc3tA+fJPmCV1Gdm13acKMGWeW4NgGWmFEhXkKq85oLPdRRbuJmCDpGzA?= =?us-ascii?Q?OM1yeCdZX5wrKrBkPkX0LI8M5tqgr4+uiXsEz9xLqFr5XYDF3aKU7JesUnnc?= =?us-ascii?Q?Bm/dF91JQAAHGgtPQO+YvZJh3rzINJ8QcinJwltJfqToLB/ntkqpVrYdiOMW?= =?us-ascii?Q?Goo9LORbGe7PhYz2AjiCTgffbC73nTpMWt6Mc7GUyDJY9k8+1KhmHQVcJLM0?= =?us-ascii?Q?duO87O9vuIME5zk9MOVL4KlpPyVdzFz0QWQ+jXQG7grF/rmCCiedNZMZWzei?= =?us-ascii?Q?D08rVBtRXRAxqkL6y1dm7TfJQbKJ8OECgdONe6Wmon60yQWK0mMo23jZOXY+?= =?us-ascii?Q?h1FIMYRZhkG4snM8xERitJgh5tuu+A0yb+a5TsqVrqWBR+CwQ9u44icEmV8f?= =?us-ascii?Q?9cmohfXVFRmsJLe86sooVIQqgS/D7gtnBXb1mOuiEF3yxjmqtlaaarnjX9WG?= =?us-ascii?Q?sg4eBOZZJTojs7ZQ3C2DZPvowM6bjjyoHfjXJGHyy6QuP7V21cZmWTyDVurM?= =?us-ascii?Q?qsPeVoElkTykuHEgcds2nlyrAY8fylJfcoIpv36EsZISI6nKaYwWeSMKxD8u?= =?us-ascii?Q?3XcdVaYLXY/4OBWyVOGDG+piUR/jfbXYeFyEgZ0vjYYp/vh97veozz21dSgi?= =?us-ascii?Q?5z1y5KRg/ZJ6S7KtGMnfu5A9kmpL6eDwriG7sDBzBtVuqsk5XOs7mznWlAtB?= =?us-ascii?Q?NmXSLlMf61KFRKXVnRwNOvS9zSpU11kKcYB0y8W9NQxyuFbQ+Zk3VJIDCGZq?= =?us-ascii?Q?QPZ9hlmybfhjvPraRaINpju1rphAhtuHqCjv66M/ew4bA1cOdHUb10gX2YPW?= =?us-ascii?Q?aLEoqC3SEWMEOFvXpsDj5GjS2WFoZ2uaLHJuUUQhjimbNHuQFwsBX9hERwri?= =?us-ascii?Q?ipyTFdNRke0FU+pohdZRjHaKksN6fxuuPtnEdRFQG8kLsqa1oCr+U0UJRt06?= =?us-ascii?Q?JxBqhwvmf7ASAIrPfCDt0yCY8isushpjZxw0lhRHJV7F2OE65lhILtbK3ucX?= =?us-ascii?Q?4oWZh+OPQ+p/2Ct3BdRqn+mkT5jMMvxFlB+3RXTCKkhBQjsU357Q4sKiG/rL?= =?us-ascii?Q?OFVmO+Z/yT/lBOMoseNURnwFEmJ1eZk0A2xq9+W6YMGCpsjBQ1OOtXmc2pt6?= =?us-ascii?Q?crL8HD9nnpD7WeGqfWXrdilJLgXyT5stxuSEsxW1DowkMy9yX2y84uTSWOya?= =?us-ascii?Q?zdAA0cFptX2I7K7BgTIeK/6A=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0202MB2555;6:HEta2zqb6BXDWu4vkSf3aaXgM3X0+UyKiRYU5X7W?= =?us-ascii?Q?HO4kyYjEC8Sdm+OD9UjMmP2p3BMbmHAvyg855LfXQtD1igK4zpP36HvsEHH0?= =?us-ascii?Q?MZTmEJM5ATg2I/3Ma23Qo2Lj94QdXjUT8uB8c7qW6xsSXsVlVsXOYfec5D8U?= =?us-ascii?Q?fIwe6xYwk+EWvwWF3VTsZZsXqbfxRr7ISZTp30icOHoeGx4pDc3q4kI9Tydl?= =?us-ascii?Q?tmzgteQxWGrWJxZENay98t5FnD6H7fgb0aINXEVPD1S8AIS00fD6sCJS0T5b?= =?us-ascii?Q?BIulaZCcXCUoYw/KGFk76ogJW2FQeHEHnwazkFdyXQS9cOCvI2dsNd2ov06v?= =?us-ascii?Q?2djhfk9nKdY/KM/yqGkW6e+kdOPAy+Bmzleab4KxMnFTvxoWL5vk++XpDlAX?= =?us-ascii?Q?5LxnbJG3DQEXPzyZwtGcwhsBy0RrHBawbSlO4ipwNVefHCygANJQfPZXfIs2?= =?us-ascii?Q?N0f/Hf7nvGMSSFo80MC6i33/tqhIAsIBzMLLCDVfrP7Go+6+nLfIh+I17dfz?= =?us-ascii?Q?G9EQ6UVNawTas5uisDa9Yvi+E5S6sxvYERhOfY48HGMjAyq8oaApaVWwOi/5?= =?us-ascii?Q?TZZ4xE+lxgKwkPh0w18gPtlgM/PPLNNMGIJLWbTBZ/q53xWoPvRBXRnjTuO2?= =?us-ascii?Q?g5jfL8ULkm9f6vXwVeQaCfqXjr4n0XiOWj0itqXTejik1vY5zqBMl2VBeXBy?= =?us-ascii?Q?GgOv/p7oljIByXOMwg5Ms4RTOvjQ9tahYf1j7RqKyoaNBRcPHgmvh208wLHU?= =?us-ascii?Q?Vvt/QGSuFXHx/n4tlD7zcEZQPk1LnXxAGtmVer7lv8DpxIjoFfPcoh6E3PVC?= =?us-ascii?Q?1tgJNspNoLG1CrlrdfOn0Xfai1z86hVqt6MQ351L+jWO14rUwLKwanzNQaJk?= =?us-ascii?Q?sHTpZu1D+WyTMUu8hy4G7+OnXKJMtMKIju/zFKRiQMUI9teDoF5KUs6y1PxZ?= =?us-ascii?Q?ZpEeEogestdBBcBoknHXr8gywIsq/d/jAz4J/oXFeD34a2qOsBXOLjxPb9HO?= =?us-ascii?Q?iMU=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;5:x9zfAIyamFU91gOg0QeD6SNi5qgpA6Kjr5qG7ef7JTFmM/sina9IaZ98EjPsxTYnNes+n/k+3Prhuz9n8WXUmj2cDWHHzjG4RlrM3YFf7SAQ9eWmu/rP5zra0YdZkAQRpJqPQcTHQdU2RvEufVrzAX/zt/zljBfCdLvYcBOTAbc1I0jesaRE5yLRofLMUlpSiS0CSv1FIp692yhCV/FeKxZMvcbotEc11Lp+mIuI9dx/QBC3tbICuE0X+nwyr/0kxNqeu7PjBH1CR0oBw0129WREgNt4x8oxXrt5JlBmd6tHxzqcgiJQZ0pIs02s+OlDkFicqLPjX/I/kZxKOhqNEJJeVbazgieoGcIjf0nbQZh4TeDBlMjiahSTvIgVfuKixkHhCkq2ShNXRYBNF017zN/w4wwu1z7yBEwfUXir3i2rTCFP4Bv1dnBZ8xZGFvyJNhdJDWDfi/eBVMUyLcvUcTxw6E2HAlGfU0sdq4jdEOLDkP00Vn7axPc8YCHPQdzM;24:QOD7+zUPaUiK23Mb+WLiSCMUFRyK7ty8JKDC7MwuW6evMKbqYTBNW/YeTTUgZDIWGRhyBxzmVtrFaXHa6S4Iy+2tSx5EVNRyEffjpIIl4D8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;7:on/cOBI60zHTWafMViHU3mC3LrUNfi05CJ23ddxuykLDreSAAN3Jexf9l0vqj5PbzPybvwziHxY0U+BdphftF8DlNCu5Ha1UlqeASsCKFZdUA1cgynSxrYy53BC2a5tvWA5GXVK5Y3mXVm2CVeu9AwDE4FbhdCeq+aCfhTUtCeN4mGBpnzvAQkA4/QMFrRWr1hbAslQMJ+7MxR6gT6TqHN0Nz419EHyNAwaNVRBTDFU3cHlFu6CSHqr+uWkj2N7Fkh0WZY0fHbATwFxCowcX52KRyNxjlBBrrbT7pbiGwyFR1wIrbML88+osSf2bzj2Nx8voB0bAKT7Ut+6+/e7FSdLYvQv/3h8gS88AOrV1YIcPohLOsegf9NRch6644t1J6XpMP/ER4uDz/w1GRW/pYlCKLj9aEjeUATn9mMNkfGqlOU/E8T/tPFBsTaU5Dj/mkb9d271l6AYJ4y0CxWlUJMf38qXJsWX6BgYbteORrqPFxZgdODxyRZePSe67IySYeSfusaG6+sZKdCAsv0s0UENbci8JMMpwzYUlWK3WrGKNcIttHus4szHzxhv2ipWTwHRfv/KvYIkXeiFQ3O3hgM0f0qbsBA6X96Z64tT8hNBY+Y7OjK5RTdjX8hm4QmOswljKo1UKXZoLhSYNdt6a2cIqeODBwXffGZo61v1ypErqQKPKpOYb0Wp0rWX4KFzNhRHof0U8/cPcIr4pqrGlsjWgtUpQJTokPDYBV+08d95hXNz29GjpmkdXygS5wtmI5c2qYawRm+h0TPcUp0ZtoZytC5wNrt9cJaTeEQkPUXM= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jul 2017 10:36:21.6817 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0202MB2555 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5950 Lines: 219 This makes the redundant fb helpers .load_lut, .gamma_set and .gamma_get completely obsolete. Signed-off-by: Peter Rosin --- drivers/gpu/drm/drm_fb_helper.c | 165 +++++++++++++++++++++++----------------- 1 file changed, 94 insertions(+), 71 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index b75b1f2..7f8199a 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -1257,27 +1257,6 @@ void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper, } EXPORT_SYMBOL(drm_fb_helper_set_suspend_unlocked); -static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green, - u16 blue, u16 regno, struct fb_info *info) -{ - struct drm_fb_helper *fb_helper = info->par; - struct drm_framebuffer *fb = fb_helper->fb; - - /* - * The driver really shouldn't advertise pseudo/directcolor - * visuals if it can't deal with the palette. - */ - if (WARN_ON(!fb_helper->funcs->gamma_set || - !fb_helper->funcs->gamma_get)) - return -EINVAL; - - WARN_ON(fb->format->cpp[0] != 1); - - fb_helper->funcs->gamma_set(crtc, red, green, blue, regno); - - return 0; -} - static int setcmap_pseudo_palette(struct fb_cmap *cmap, struct fb_info *info) { u32 *palette = (u32 *)info->pseudo_palette; @@ -1310,54 +1289,68 @@ static int setcmap_pseudo_palette(struct fb_cmap *cmap, struct fb_info *info) return 0; } -/** - * drm_fb_helper_setcmap - implementation for &fb_ops.fb_setcmap - * @cmap: cmap to set - * @info: fbdev registered by the helper - */ -int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) +static int setcmap_legacy(struct fb_cmap *cmap, struct fb_info *info) { struct drm_fb_helper *fb_helper = info->par; - struct drm_device *dev = fb_helper->dev; - const struct drm_crtc_helper_funcs *crtc_funcs; - u16 *red, *green, *blue, *transp; struct drm_crtc *crtc; u16 *r, *g, *b; - int i, j, rc = 0; - int start; + int i, ret = 0; - if (oops_in_progress) - return -EBUSY; + for (i = 0; i < fb_helper->crtc_count; i++) { + crtc = fb_helper->crtc_info[i].mode_set.crtc; + if (!crtc->funcs->gamma_set || !crtc->gamma_size) + return -EINVAL; - mutex_lock(&fb_helper->lock); - if (!drm_fb_helper_is_bound(fb_helper)) { - mutex_unlock(&fb_helper->lock); - return -EBUSY; - } + if (cmap->start + cmap->len > crtc->gamma_size) + return -EINVAL; - drm_modeset_lock_all(dev); - if (info->fix.visual == FB_VISUAL_TRUECOLOR) { - rc = setcmap_pseudo_palette(cmap, info); - goto out; + r = crtc->gamma_store; + g = r + crtc->gamma_size; + b = g + crtc->gamma_size; + + memcpy(r + cmap->start, cmap->red, cmap->len * sizeof(*r)); + memcpy(g + cmap->start, cmap->green, cmap->len * sizeof(*g)); + memcpy(b + cmap->start, cmap->blue, cmap->len * sizeof(*b)); + + ret = crtc->funcs->gamma_set(crtc, r, g, b, + crtc->gamma_size, NULL); + if (ret) + return ret; } - for (i = 0; i < fb_helper->crtc_count; i++) { - crtc = fb_helper->crtc_info[i].mode_set.crtc; - crtc_funcs = crtc->helper_private; + return ret; +} - red = cmap->red; - green = cmap->green; - blue = cmap->blue; - transp = cmap->transp; - start = cmap->start; +static int setcmap_atomic(struct fb_cmap *cmap, struct fb_info *info) +{ + struct drm_fb_helper *fb_helper = info->par; + struct drm_device *dev = fb_helper->dev; + struct drm_modeset_acquire_ctx ctx; + struct drm_crtc_state *crtc_state; + struct drm_atomic_state *state; + struct drm_crtc *crtc; + u16 *r, *g, *b; + int i, ret = 0; - if (!crtc->gamma_size) { - rc = -EINVAL; + state = drm_atomic_state_alloc(dev); + if (!state) + return -ENOMEM; + drm_modeset_acquire_init(&ctx, 0); +retry: + ret = drm_modeset_lock_all_ctx(dev, &ctx); + if (ret) + goto fini; + state->acquire_ctx = &ctx; + for (i = 0; i < fb_helper->crtc_count; i++) { + crtc = fb_helper->crtc_info[i].mode_set.crtc; + if (!crtc->funcs->gamma_set) { + ret = -EINVAL; goto out; } - if (cmap->start + cmap->len > crtc->gamma_size) { - rc = -EINVAL; + crtc_state = drm_atomic_get_crtc_state(state, crtc); + if (IS_ERR(crtc_state)) { + ret = PTR_ERR(crtc_state); goto out; } @@ -1369,27 +1362,57 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) memcpy(g + cmap->start, cmap->green, cmap->len * sizeof(*g)); memcpy(b + cmap->start, cmap->blue, cmap->len * sizeof(*b)); - for (j = 0; j < cmap->len; j++) { - u16 hred, hgreen, hblue, htransp = 0xffff; + ret = crtc->funcs->gamma_set(crtc, r, g, b, + crtc->gamma_size, crtc_state); + if (ret) + goto out; + } - hred = *red++; - hgreen = *green++; - hblue = *blue++; + ret = drm_atomic_commit(state); + if (ret == -EDEADLK) { + drm_modeset_backoff(&ctx); + goto retry; + } - if (transp) - htransp = *transp++; +out: + drm_modeset_drop_locks(&ctx); +fini: + drm_modeset_acquire_fini(&ctx); + drm_atomic_state_put(state); - rc = setcolreg(crtc, hred, hgreen, hblue, start++, info); - if (rc) - goto out; - } - if (crtc_funcs->load_lut) - crtc_funcs->load_lut(crtc); + return ret; +} + +/** + * drm_fb_helper_setcmap - implementation for &fb_ops.fb_setcmap + * @cmap: cmap to set + * @info: fbdev registered by the helper + */ +int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) +{ + struct drm_fb_helper *fb_helper = info->par; + int ret; + + if (oops_in_progress) + return -EBUSY; + + mutex_lock(&fb_helper->lock); + + if (!drm_fb_helper_is_bound(fb_helper)) { + mutex_unlock(&fb_helper->lock); + return -EBUSY; } - out: - drm_modeset_unlock_all(dev); + + if (info->fix.visual == FB_VISUAL_TRUECOLOR) + ret = setcmap_pseudo_palette(cmap, info); + else if (drm_drv_uses_atomic_modeset(fb_helper->dev)) + ret = setcmap_atomic(cmap, info); + else + ret = setcmap_legacy(cmap, info); + mutex_unlock(&fb_helper->lock); - return rc; + + return ret; } EXPORT_SYMBOL(drm_fb_helper_setcmap); -- 2.1.4