Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752285AbdGDKgR (ORCPT ); Tue, 4 Jul 2017 06:36:17 -0400 Received: from mail-he1eur01on0102.outbound.protection.outlook.com ([104.47.0.102]:45036 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752183AbdGDKgP (ORCPT ); Tue, 4 Jul 2017 06:36:15 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=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 , Peter Rosin Subject: [PATCH v3 01/16] drm/fb-helper: factor out pseudo-palette Date: Tue, 4 Jul 2017 12:36:57 +0200 Message-Id: <1499164632-5582-2-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: c378c790-16e7-46de-abb5-08d4c2c87d89 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:J+W0rfZGeIAJqc6tZNcQfvJpEOc6Qn4eLtjuNSxutIchs2RXjGvSaFDpbGdpch6Oev/3q0oc8b5asG1vcNm7QmoPYSz77fNcE18Aw/oGQsFQJfOVM6fkjqBWg9fegzQNy7l33kAVladHFNYpUopnejam6EeLcFddt26v0Wi/9uTN+O6R85pnhDMkYHFfCgv7bINlx5yXmON7hQMMQCrwEGZrtME8FE0vrr3PKi9BPN/UIeBh9owTwmwAeI//GBAq3wzAToNmF2ZeTDU0e1gkmhinzJ9t6dfXscei3pNMxR0Rr+t1aEripp+5uNuzuEKmbBdxZKCTlodkFHr2FjKaulIuy1aRuWexJIlURTFLNOQkTS8jrRfcVsqD+16KJ6ONGoCTjh89TFblRvf+z6+PkNkzbHO1N38eWHjtsaWCI5oajBzocunNV51gQOlX3QGGMJHZHCJQ43Z//q3+FUYU6GsLr7uhPB8kE+0MAZqoQkiYO+AfqV9J/tu59SPx8iD+YB8IOA+wz+0t9WDLnpkS1Ll0hwFc/TKmFolDVBa/c649BfUqtS0TtFxQxygyd6aIpz8gZEAy0WhuECsKGNjcmRtiSobzDRzo12HmxTBeHJGGpb7+6GUvlgAQA89+4UV12pdUqhjJmWtVHTXpz9nHrzaGRKPlcpZ+0z+wnryaqPRcRh8lVRIXtvAKVgqaELvMvu4hcP1lgNRAE+cxyRDD8g== X-MS-TrafficTypeDiagnostic: HE1PR0202MB2555: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;25:Joy8BzpQ3W506YIjbchjKeU4ndFi0fNOUi/WKLcERND5hwrVUICXIMq7xJmfP3ZzriB1qXl0hezYhv7zhA/0FVlMMfMzIZkWPaPmrtjlXSN6HaeV5A1Y4X8YTpyjqgYp2VFQOBxfvdwWerv9JftkSMa8Id0eiH+gkxDqtqLiN681fEIpHL4eW/x1qj58vQderv23k3XsWn1PZAt6jqgwKXS+AT9e8QJm/cZ8HgRi5L6rUcMQ0vhqJtlBf9NagJLnDLKJGC1KW92IByKkvfFWfdRiLWSBWpCA79K2guR7g+ChymVM1N/k+p3h7tC+Fj0ldUSdBWn6VVTVPJPKba1RQvNaf7Mgq8SCKVNgcmRYOH5pkZFgWsPiPMVnD22tiUo3hrORofcYcQAxy4UJ3mnhzbUkhrcTM1yXhEesFCBJDWev4GuVFhME/XFD4qwWDZBEFEQLh88fEnVisG0Q8HFkvZK8pCyWamolH7PoRPoYKTzV+U7vAG4GLVQYBYEGp+Nd/emvAlG518cIuW6D9qQWytO7EUii5owqkkNpyAEJHEH0LkDzKrw25dxGAkg3NfC4UfXbW2OJoKij+vX/f8UQLvztUKYhZLRK2RLOfCq/W5pqRNqy5y4HRjx5J4yS3Qtrep15dTdpV0Bofhb6T41pI+xIWkVvCSSm6WacCPFB2Zop9HZdjfHJ+C5cTTGmxwJyuX3soQqRuxn0ZwixxpiLA1Ztwc1C1gxsw3R6lu6blpp5EVouEX0kbXZuOPxUWMtCKNgBdpcyL27Y069RQ0EUU9+zBgroANWdXf1t8uXJTcc4Due4OO29Ulv91SzyWfD/V10G1sctCZthzT9FF9J0QTp8AGBpVne3tNgAPur1xrsehbM4nCehVi56XzL7ZkDZAtREHdWCpDKFMW279CPRL+2POIReCo2Qy4fUnEcsbR0= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;31:vJ5niwxLkNH2u3HcjH3pi65BgEWs6tqSiC9oOYQN0BzRcryT5r8UrfhmImbBS/j/EvUVkL9/GtqPD9pt3Vc9yxhOiEW5TWFkVYPSsIOhsq7NjNL0t9BCNRlqq8allsBI+nQ/PUqt18/6xTFHhDz/6iYBs38KbLxdkKxemWSBhi6AtIF+ZuUWAanYaFTM8ZauPO05RzRhRsTHLh72aQjUWKl7Y1ORVYJvGiF8qz/UpYqATSRZqIoZtQQVVuLLYSHiKowX/9R0dxi1jGOSGziBhs5CJn/iv6oUxIc9DjHbdQPLrmH4Tpl3prj92gzy5e1K62HD+Op3zIwScVvchlRph62sTdhZNt3alsESZXxNBMQgZUr2atqTmP82WWmzwNF2hkiCPREhQK+nyBgnRbqB/yQnrs17FA5oViKhxdcbvaW0D02cc48nU6UhAwo3nTimlY6C3o0o+P51O9Bq6UTCX9Mq2iPxkBJNm0NH0yaSrJHcWBKzpkpEFcjyaI+T35UZX05GIjor2YqVp5ZGwgWLAvAdYfWtnc5eoehL3Y974MfDtebqXs8icX4mOfBj7FrzrEDLRLkuyRP2M4G3f3JTusnKrn9FvyeGfMpuUhMQ1OBKncXvmSx/j9BJYGzMbo7TMqKdCwycu4j8+trY60WE+doLUx/ixTGiYHz1O5ca5Jc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(167848164394848); 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:XqHg2wuzBlKgR7CBAjAxoOnvWgB/MaNQsQ6bHopu?= =?us-ascii?Q?oJNyfP7T8RH4AhK6k123i9toMYnQ5itrssRNeJ9HvvJ7d4DDwQRg7vryFNjs?= =?us-ascii?Q?h7EG/T/j6AMeeCRet3AuwaA/wiLBZ8QMlvDc/AZATgUMI/51xwV8fcxl6dSr?= =?us-ascii?Q?oAakSK4/zZ01D47Hw5cShHUKlWzNbJDtcRFGFGbvi4Aht0fg8ld9rLyJKSwM?= =?us-ascii?Q?P/wYHv9NhFfg5HWOp7gIx4D+qLMpxvKvUpr+up16RmvJqiy6zpcoavFNQmQp?= =?us-ascii?Q?1GwfahZjuPpBDon8nv4pTcDy4uqoWu4EGteAlqCXe1rQG4NnYWakAOL+BVlK?= =?us-ascii?Q?tjLvmvA6tho0o5Keii6XChRsARLrEmS4MpRvnVl+vEI03iIxDE+0dfSWjQjQ?= =?us-ascii?Q?bGUa3HzqmOu78ryQ3mDOBmzikJzlHiKwIM5hVYpHYSempSOjeywqeRkai/TX?= =?us-ascii?Q?n7x+cOhMapum6GUC0TfnBa3bjepjOOHYMtl59r9kBIkXUM/57QEsZzYXfu9D?= =?us-ascii?Q?Xa2yfrDS73YuB0MmG7WOLVSNmJTU1bjAvljCTiMAO30jxgGNT6YXaALzGmHQ?= =?us-ascii?Q?YRXgBVhM5+UCY1wsKBxFAF+HouI/85f339NoJ9nOWFugv5CQj5EbYkPC0vF0?= =?us-ascii?Q?whVPVz94m0EyKwJPhOLNKR+V7l59+UKEx+WEk1CBTCIaQouK4/Oqw0GoikQo?= =?us-ascii?Q?5xigj/mVtaByWIFFsd0XhQrIOvQ7ZKhKaiOSnvA4fFwVi67d1Wo82iJMC2vQ?= =?us-ascii?Q?m86+V932hJNzdJOkTXQ1APfTaRRsDv3be1fUHyTu0j9xNejmBOLc5YiYp0OZ?= =?us-ascii?Q?28dQMIbLbi9pCE8soIfzXV7NUflrsE2u3JoKbGnm12mc2seVij8auhdFWQ8K?= =?us-ascii?Q?5uSYwjzVlQchPURFT9XTPLpe3b4jw+Pd6+OjTcYrrwJw056EdJktWYO2TUlX?= =?us-ascii?Q?BKdi0Uol3nkrc4ZkaDp16WBCklBz7a1uKM92aRBKKi2h8LVmE+k2IMpRu7mf?= =?us-ascii?Q?FlGgnUy11SGm9EblqVhJ/QOY1xhQotQu0DdRwxZ4Q38wqu+PIheOE/iRavuu?= =?us-ascii?Q?IMPd8Am4wWJloAYm0nn2nerAl0cNLRbUM85zfi78g3YULc+y6mllgySMqavN?= =?us-ascii?Q?5r6O1vDUmW7QGW4au0pQL9H3uUH9JJf8fe5ZzmyEAy/+4QqpZRu5u1vhQoNV?= =?us-ascii?Q?B2NadHrf2KPPjZFypjQn6Qbu/RmsOkEHuMv7hgtlfH0/5QVcWqWf6yuCK1Sf?= =?us-ascii?Q?oHAVNyBk6nQrNqWeG7B9PMjbjkRrZJZROP1IiVSP?= X-Forefront-PRVS: 0358535363 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(39830400002)(39400400002)(39410400002)(39450400003)(8676002)(81166006)(7736002)(47776003)(189998001)(3846002)(36756003)(305945005)(50466002)(6116002)(50226002)(53936002)(86362001)(33646002)(66066001)(2906002)(478600001)(42186005)(2361001)(74482002)(2351001)(38730400002)(110136004)(4326008)(25786009)(6506006)(6512007)(54906002)(5003940100001)(6486002)(6916009)(5660300001)(6666003)(2950100002)(50986999)(76176999)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0202MB2555;H:orc.lan;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0202MB2555;23:wWyuJhJgFOF33vHVh7kM/L2Bt7ysZwhdo1X8YQd?= =?us-ascii?Q?KD9Ccc5QqTPeu0anbmPfgn14lM13BoFkVVeCBCAjz7FBEvU7xPpaQNYpNOpn?= =?us-ascii?Q?Ujd6ViC+6OsuVUfg3lVrXq0loSL3jUPXyn1tu2X/cm5klW6+OtmAx6+R45+o?= =?us-ascii?Q?ozbuLb5hj2f9Oe/vsqRq4BJUO5wyMtCr3N/XSQpyCu4JdF3+tILVGdjKGvZk?= =?us-ascii?Q?fFRLp0gIyjJ3JSI6MQRvG0gnNDq1a/WucLkr0U/QmBKnixUF2gGDZlAt00ph?= =?us-ascii?Q?SVc4I+FhFyF0FdyZSh88XicejEacVQSVzsCATetrqDleB/F8oFUNe5GV4R8A?= =?us-ascii?Q?xjfH/EtFnPup1G/QzRMZFJPVK0E4vye1Vcb1W6hllqlNBQj5L+vmdFYYd2E/?= =?us-ascii?Q?/YMPJD6wGtjFqSyggr6hs5rWoVfZ4zW1YxFt8MRf461TK8EH65AllppSN+Uh?= =?us-ascii?Q?R+DsMljiClIOff9OPhSvDr/GPklZK4LlH0q65eEZLSWGIlngz9Kpd6rh1W1b?= =?us-ascii?Q?T5FDZRBTahsf9rmMlLldoGwoIUbh3PS8jfpiOeVL419QqbXOggkzXMGb7zrY?= =?us-ascii?Q?uzoCjI313r8qhMOk8A4KaFEQhgI75a4ttDw09iaEPCUgui6vlDT+cUC5XYF/?= =?us-ascii?Q?qEKk79XhGn7qZbN0lI9tGsXiQn8JqakCN4jskxD8dLy+7plPyoqxMS+7Rrx/?= =?us-ascii?Q?E2fU+pwR75UrfCW8RgOVAb8PcIZtr7uaULXwlubuASMDfsdezxdsksgHInyB?= =?us-ascii?Q?VkyXKClqNye64jWOV7+bhZp2lzFFtKHQin0lxF4YJIVd+gIu/f2FRcMoJc+L?= =?us-ascii?Q?J6Z3JbwGoFE8lL5XO+aKIB/H57VoforbiSqS25s9/NfvAmR2I4ee87093RYR?= =?us-ascii?Q?eVYbsq6ywnv78I3ywcPxADJfkRlCOj8UfcBTvrKyNCQWEPydSCifC3iwufxS?= =?us-ascii?Q?1AFNkkjd/TCd/FEXjPgRfl8nS1+F13NdBx92cNXtmb/pDPgku6L4Y5eCZ6T5?= =?us-ascii?Q?mut2y1gW2uEM0F/UinXhY0taP3u8IgeThO6qh5Rv2Cr1yEwGft0kcKgjjBxR?= =?us-ascii?Q?08MGcsE54zDt//ZIgqUIoo6agyNOC?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0202MB2555;6:p9MM4MSxte12aN1XQIQsK808iQNO6rBSbMjp52jm?= =?us-ascii?Q?H02gsST8FpbKf0H6MmcJ29OmPY391l18B341vmsKHqKSwmaIGBscVCyDgznj?= =?us-ascii?Q?lUCdxmFTYCZ/E7cTVOj/LbExdXm6BNOlq4N3VusgF8jbOpP3Cq0k6g5onIOk?= =?us-ascii?Q?lUfikvquVa1/HiQ9pswBl9R5Py/wJGOGadTUZTQ2m/WNZfrwS1ddQDTxE2PA?= =?us-ascii?Q?85KpjZec3Suzf50BPzJhkP5ceaSTKgoHv6fNP4iWPPqIsquV8LTgCaDohNqX?= =?us-ascii?Q?yXKpQGIimwX9KYRjkdOW8xuQotnctAiFlQ0O/8X/KPKrNR4XvA55x+2QQ/9B?= =?us-ascii?Q?RuG45BYidhX8LSZN/dtevDJMGwfoXMw6TzgenfFCatGM+NnTr8WOvY3KqkZN?= =?us-ascii?Q?mmMegBXJ+ZuAxAvqZo9aIHh0g7x3NcTmJeNexmVCQcUlCta0adddv8eEZGeB?= =?us-ascii?Q?r5QTGNxXf8OSL3ytQfHElVvWS5q4ruVyHQM4PT5hBdoSPSArW9eQkF5zIdfR?= =?us-ascii?Q?nQotXbu/KqwIWquYWK4Mh+stAEyup09+4NRiFZhnb41YNqA8C4pcFNZQxvyb?= =?us-ascii?Q?fMOgz187AGgwkuwLJy0POwy7VzMQByGvOdm2fN2i0jhoMFuexDg9CLhZzKqA?= =?us-ascii?Q?Er/fPdXzv88WlSJZHYHp0zNa/MgI2KYZA1T0mIWWeYGqzSxbx2CO/YyajQ5k?= =?us-ascii?Q?rQRVmaF6qPNnlxs1PitjX1Vdw9agoHZlWrQ6Y+KdF2RSDPh6noP6GfupMg0I?= =?us-ascii?Q?LknCjD0rGmQFc5bUtLFh9IckbxRWOCm4hy/HyRqkseZ1Zuqc9WpXrQO/G0cy?= =?us-ascii?Q?1d7SuH4McOn7/pRwhm6Y2rJmPKmkfSWS4A+qW+gC6TWDXjlD83HwTab1eNqR?= =?us-ascii?Q?g73LE/F3K2VrpAyR7Ns1ElV0uI328M/tnUUUT1oPcXWMxX5ndi15cBRW54h3?= =?us-ascii?Q?MwWe2YETzZeeUAj1zAbtm2kTYxxNafr02L4zXHmAJXWKl+k2Cy/Lue3K5Xau?= =?us-ascii?Q?sWk=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;5:WbMHz58XW6gHM5MzgAWPTTxUUqf7qiR8WBYWy0GihgHqmfz6UApNKYzd8R4n6Acwr+SXac0n4gMBQqa2Vm9Qp90Qn6GfwCntWI3f04OIXKdN0Vv5YhSTp3xifZL/oB4Q4I18jcx3sajdqF/m8XYB4wj7HBI3mlxoX4Z3P2yrWsBz094+qrUrUGT6YyZQqZXc/b0VoEadWmbVnFXEdrU9qOuYiNBpwtIzHME5VgNTWwAHdFw4+mSTuEYk98E/WN/7q8EhQFb3rER1eC2UpVIaz+5tiuNdWptHHpfLEpiUMSTlG+/h0lorXZayB+/zNlr++R24Iqp5+K6G3aT4JDOEWxXRyWnVdUKjvXOjYZuh0mFyTvnA5r0sLoft97xzVL4lizHdtIFXzxQRCml08aZwhQJFgb6vD8R/x5ED5uDXtrlfIbwD9mEKXezzjmBCjozdMfgv4ZTWKoOSCl16tWh6LiWetdrgFtvkjBX+V5rsXvmRT/ECVPSk84e0Xnql+5SQ;24:65i8DeV/Du5uw/J5qVig3QQA3ghqr8vExKxAoKGJI6myE0Sn21njAry20W14gLpAFEVvpDZBjBt0LWhJiobQ3L/RXvrmeNpDwpNEgQ2brUI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2555;7:DHTKzZcjLL9ffY0WRQThUaB4SsVh9LYHvnk3zZSrrrPWKrpTUKlgYDKs76SWugw/2pU/zGVYhcANhO9ZNjPO7sWBnHVyDwkVdX2X3HsN7PUs8ARGA54OGnC4Fh04ZT+um8N7CKcIKXLviwkcOMe1AwUtVxtH3NsLYUGonhaFnSVmno49aIUwSpG6Gxfkwcv/6kvNOROhYiacKSynLUVvl+0XH6yxCYcY3qQMKxK1jMyWPp22wrX4cc7726S23q9M3ZJuDUF4xQx1i5tYfjEDETb1XS9EK6mBVeLmPptnTtrrk5pNKVX0yTIuxjB36z7vfL3ywO5twiXghKAV5Qgmlj/xtAPbOoj/FVl59KrzN4lG9Kr6L0AwAQPks2wtkRImUfVl2X69dHicEpdNtmhKl2JrCVxF9Xjko+z0GR5E+0QGtgO9JJBb2nUbyZ4os9+ZLox9PKtlvvy1B7PDI1W8boxUErD/hd8bJxnPwr2fdnGA07FmtPuTef9D0IqZSAfdvcTFRl26jmc4BVLbFS1w7emn6FV5XiIScQaWr2PN+lQj1+y4Z0Rf8Zi0PP6dMRrYFpFOnn4OS7ySUSMBTlruQjSgyXdxiVMxG0mOE1Nel4OJyht14QYe5FLT0LGzI4tcRDC4/5bukDSXka4+HuElaZLJ0Zldailp/g0CIGHubbqJPEBBabdgCXzRalGSmMHN5nmjsdOlKJRTYKdWY6VgR5DhHGfptNQNQNbRp8VQMkeJ/W+E2E4aD1Aq/X2McKvr92FB0JSToJLVjRBja2kq1bF4vz6LJajvIh76g+YS4o4= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jul 2017 10:36:10.9317 (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: 2814 Lines: 96 The pseudo-palette has nothing to do with the crtc, so move it out of the crtc loop and update the palette once, then break out early. Signed-off-by: Peter Rosin --- drivers/gpu/drm/drm_fb_helper.c | 60 +++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index a4cfef9..9c76b8c 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -1280,29 +1280,6 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green, struct drm_fb_helper *fb_helper = info->par; struct drm_framebuffer *fb = fb_helper->fb; - if (info->fix.visual == FB_VISUAL_TRUECOLOR) { - u32 *palette; - u32 value; - /* place color in psuedopalette */ - if (regno > 16) - return -EINVAL; - palette = (u32 *)info->pseudo_palette; - red >>= (16 - info->var.red.length); - green >>= (16 - info->var.green.length); - blue >>= (16 - info->var.blue.length); - value = (red << info->var.red.offset) | - (green << info->var.green.offset) | - (blue << info->var.blue.offset); - if (info->var.transp.length > 0) { - u32 mask = (1 << info->var.transp.length) - 1; - - mask <<= info->var.transp.offset; - value |= mask; - } - palette[regno] = value; - return 0; - } - /* * The driver really shouldn't advertise pseudo/directcolor * visuals if it can't deal with the palette. @@ -1318,6 +1295,38 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green, return 0; } +static int setcmap_pseudo_palette(struct fb_cmap *cmap, struct fb_info *info) +{ + u32 *palette = (u32 *)info->pseudo_palette; + int i; + + if (cmap->start + cmap->len > 16) + return -EINVAL; + + for (i = 0; i < cmap->len; ++i) { + u16 red = cmap->red[i]; + u16 green = cmap->green[i]; + u16 blue = cmap->blue[i]; + u32 value; + + red >>= 16 - info->var.red.length; + green >>= 16 - info->var.green.length; + blue >>= 16 - info->var.blue.length; + value = (red << info->var.red.offset) | + (green << info->var.green.offset) | + (blue << info->var.blue.offset); + if (info->var.transp.length > 0) { + u32 mask = (1 << info->var.transp.length) - 1; + + mask <<= info->var.transp.offset; + value |= mask; + } + palette[cmap->start + i] = value; + } + + return 0; +} + /** * drm_fb_helper_setcmap - implementation for &fb_ops.fb_setcmap * @cmap: cmap to set @@ -1343,6 +1352,11 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) } drm_modeset_lock_all(dev); + if (info->fix.visual == FB_VISUAL_TRUECOLOR) { + rc = setcmap_pseudo_palette(cmap, info); + goto out; + } + for (i = 0; i < fb_helper->crtc_count; i++) { crtc = fb_helper->crtc_info[i].mode_set.crtc; crtc_funcs = crtc->helper_private; -- 2.1.4