Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753044AbdFQRrq (ORCPT ); Sat, 17 Jun 2017 13:47:46 -0400 Received: from mail-eopbgr50094.outbound.protection.outlook.com ([40.107.5.94]:14944 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752925AbdFQRrm (ORCPT ); Sat, 17 Jun 2017 13:47:42 -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 , Boris Brezillon , David Airlie , Daniel Vetter , Jani Nikula , Sean Paul , dri-devel@lists.freedesktop.org Subject: [RFC PATCH v2 3/3] drm: atmel-hlcdc: add clut support for legacy fbdev Date: Sat, 17 Jun 2017 19:48:04 +0200 Message-Id: <1497721684-3002-4-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1497721684-3002-1-git-send-email-peda@axentia.se> References: <1497721684-3002-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [81.224.171.159] X-ClientProxiedBy: HE1P192CA0016.EURP192.PROD.OUTLOOK.COM (2603:10a6:3:fe::26) To DB6PR0202MB2552.eurprd02.prod.outlook.com (2603:10a6:4:1b::10) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cd4b075c-8ca2-4959-e746-08d4b5a8f2ac X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075);SRVR:DB6PR0202MB2552; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;3:Q7FSFary7VfiYfSlVNYyD9uetubfdgfutHIpLxX+EX1ivqnNzYfn9u0017a9MYRw01pc/dIpY8yLfS9+TxNwelypsAbDupyfjCdfDIKdkR8Q0mtWgnxUs0/xFd0oZhlJR83ettYla5ZQlrTJZhjUke9GWh+F2gaRBicHfchZyOZ7l50mTCxOFc44zKqKJNiciuqe2Fgi74bFWUKuL8VCn0reqShWWgWqalIV+tcNtMBPmUkidV2OJ/HRiu2Ix9cWPfnCF+gmjpeYGT7kCAXtNrhE5WUSDlZczjJUnRJnF9aKOMtunPNrGvpNoc31i4DC;25:V14ckcIzAXg/EmqUjSta3dVscxzokqmNwbllSOAQur4Fd2CJMpHHSuaKSuFF2L8PzuuCZvfRREFEqQbKWaZ9oueuJC75igPQo9vigWAK4zhQ5UKkyLQVu75Z4uZWh1Bnvx2uTXjVoEfjf4/T9mAvmCYPjJ47RgYBfWO/9ia0OuZgrx4o0jTDg3bsj4ntWToqDAEcjhfLawAVx5OSzPctM5yKO7k4uWBYIaw+B6HkHZrOJRl8rcLEYisJ5D9oNB30BcmhtYfRUY52xDkTlYr1OYstV9iVDCAxgs5L5oz+A0rRLM2qjYsgvcdR06ncAY2EZt1ktJMabusT6UoqMqIOa5sXA61NOnRQKnlJnqIA4wueAQgj9s31jcBuHNCN6iqOh+2oaWbtn+Zc5NpCfgHYjVayi6yFHKdwb9yWUSYfsIQ9kadr5UXnDzvk1MRn8cef9yXLTj7qCRg9DNAEysYp6zNl5viMv4MuHaxThD2IlF8= X-MS-TrafficTypeDiagnostic: DB6PR0202MB2552: X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;31:3tHdGMoXHog/zpzvl8xVFUl0W2REjOn/FI4kEQV/NqlAvnk0Gy78gu1eLpulgpHkfD29DtaylpVFcmphWXjsDha4gVGFdXqpdcpm5pDr7Li3nin8rrE3spnSMYz7krTbKOUr49TheW1Z7gjgQIAl7EtVhd56Ju3wcDcw4CrdLKiE0Foal68vdCMWShdq8k7/9QpR1wwxnjMDFisnUHuq39CQQXjYKGkN9MUBeUpqQlc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(2016111802025)(20161123558100)(20161123564025)(20161123562025)(6043046)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB6PR0202MB2552;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB6PR0202MB2552; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0202MB2552;4:PMs9OMMxJa+ba7XOj0m/Bx4Od2t+MSjzvrtHkxvO?= =?us-ascii?Q?HC+qdQnI4Qs4/GvD3c6mRq20jIiReISXoQYbFX17GjmAOaQB+b/7cG0ApVhp?= =?us-ascii?Q?sTYME5n/1qKVryYTipM0/ry/4R5Cagqb4Mk2RF/Tge4/gN2KXMFsOB4bfN4f?= =?us-ascii?Q?3oBg3jm4i4A6b1LF3A083ezpHv3C5gpjtXqQ9Mj6ySUDKDhFy238tiLgJSpa?= =?us-ascii?Q?3WaILMCKFntM59xsKhZZclmdnZRo1rGh660/afv9doVCksZ2HqKsvu2Q/I3S?= =?us-ascii?Q?ElXjsZcIkKvTmdVPxUlGaiRmTDj67MzMIxPB86DVc5ctKGurC49VXo2dhDe5?= =?us-ascii?Q?OiJGmvWf856c9s307j4DXIPA9JbHvUEGQrwAN9KoyxVUtA5pGEpW0Qv2YV0Z?= =?us-ascii?Q?EClnFTLhvAgy4On5OPEAgm6CTnVyKlkqGQdP7HIYw96BpTISaFUQgyuWxEin?= =?us-ascii?Q?UlaG8I921NKEONazO9JPCfXdSFwumToGAEB04chLWtFKXelnFd34mGVWYGqC?= =?us-ascii?Q?mkcWF5NihLA2LX2OQvcZydsQGwmYpeGNou61h2Beg27aKO6ztXsl4iiNTwTs?= =?us-ascii?Q?LQ7nF9BHV4pjjjUfv8ZdrVjoMR+XVVFJcY5tmDsLBh/RwAmMiC1OWS5xHrYO?= =?us-ascii?Q?ZVppPUW29lrCK/DLadWuFm2jrp9bdtBUkWLnzEP0XqGoMWCtqT9l1K67bQq0?= =?us-ascii?Q?vXd78dxAWz6G7ZOcfLj96xbPO+eRQWxCoxnnY9j3pcfyM9rajzmRNB6D0AP+?= =?us-ascii?Q?ayqSiTiwHA82sk7CLDmrlU0xnmf1tcmEIDGEsfefNBLM6g4qp2DdkX726g+Z?= =?us-ascii?Q?tuNenx2q4XySrZe8za+Ql0DI0HpgXSEP4C310YXr2XlSVMhDWdSSCsQbWo5c?= =?us-ascii?Q?kKaJ38QSOcQjuSJ2WGZP+UqZBkRNnQoeZa2aIBo46ovU8vrI9/bia9mXBso9?= =?us-ascii?Q?ipp7J57QIA1wXZBnTwj85/vKCA41KJKzunka0WtzuV9rwz4rMFrEzPTPaaZs?= =?us-ascii?Q?DGEGhfppwTgxUka3Stkcncol+/buB5LQkHigbpydzyVtLnQ8ycKyHWt1fMu1?= =?us-ascii?Q?+CtpLGbMp611s8FztQwAEGIs0dwIpJPraWpEr1cYy6tsKOec++NkUO2Fanhi?= =?us-ascii?Q?+tPJWsgRsvhLC19UcB81XQrvV1wZMLWX0fmGV6I6JqoWO9TY6mY3EqFbJ1Cy?= =?us-ascii?Q?BtvHvYYlYk11vKNvy1EQJxAKrwqSaBzj8bkO?= X-Forefront-PRVS: 034119E4F6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6069001)(39450400003)(39400400002)(39410400002)(39830400002)(76176999)(42186005)(50986999)(189998001)(33646002)(5003940100001)(2351001)(2361001)(86362001)(25786009)(50466002)(2906002)(48376002)(74482002)(66066001)(4326008)(47776003)(110136004)(38730400002)(3846002)(305945005)(81166006)(5660300001)(6116002)(50226002)(7736002)(478600001)(2950100002)(6666003)(6916009)(8676002)(6506006)(6486002)(53936002)(36756003)(54906002)(6512007)(217873001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0202MB2552;H:localhost.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0202MB2552;23:L1oJ8iAYIYvjU0T9+rSnR+ch5OX1HTVKaB/TWU3?= =?us-ascii?Q?EIxfvIo+OVwipda6Mq0e1wFsN2f7Ugfw7mu1cz11TOmkf2q3npGXRwyO4wco?= =?us-ascii?Q?0r2PUQhQpHqep1Ak25KEnIKjxEEyvv6N97ftAdXOA/jDi/EyKquF/Eq6hpfN?= =?us-ascii?Q?UG15TI0vNzI4Eb2Cupt0nbpTuMbQSKaDc7nkkbLSwtjqIr/KnALdCS0X6qFx?= =?us-ascii?Q?Z8X0uyIUGDp4fhk6aun8rue3UktkV0I2b2RPzWibVJmuK5uRX/BMy90zTxyp?= =?us-ascii?Q?jyE7YszWfQIXSWVAiAF742FcA52jEbfPKn9p6pdtrvxZtOJVvnp2KXTqN283?= =?us-ascii?Q?9ofDCtoZjOp6BX1gNFj4mKxVX+Pf5TdJ9XZ/wR0asKDXkZLUsgRPot2YTtz/?= =?us-ascii?Q?YoNiJJu9CSAF3o5uCHcrqKj7LPKZSrsDuTjs48CcIUOHpHuvYE2v0g9w0x7T?= =?us-ascii?Q?os2Uiqi3NdN4HlO1JzEclY4pIgHoDAV7hBHZirpyGAq5WNXTO7262xv7WAuy?= =?us-ascii?Q?yzuTCBg/Kj7DMpi06KkAKv9tLoW3S0MmMhNKtou01EQ92lD1+8DYsnJItdLR?= =?us-ascii?Q?65r0ava0zT7eaHkeUi9DAcsiwjbCb/b4s2QocntyUG18bMjTImpEL00mL0U3?= =?us-ascii?Q?7vxShVeYzyLf72zSHHwMwerODoJO51eJE6EohwN8dqWi4zr5/CfSHsf8blm9?= =?us-ascii?Q?8NDwLwiuLSO1DGrls4XgLIek5bd2DCYcLCAGTyPCVbH1ohZzVb+Ml6b3lauI?= =?us-ascii?Q?8KaQoix1JkVmj5o0AaZ8HfOww4akorjkctyjIqblQJoILQTEO0hUm6TEoPuN?= =?us-ascii?Q?uDKHwrMm1FJ4iStnJdbzpynzXJJEw2LbSEBOuw5AKkwK+l+RNUy3TmCCUGTC?= =?us-ascii?Q?uGClfFmbdoQeB1t6pRhlwsjuKl+nDPg/WwR+pdk3J6/r5GYXldCpe7lK1SZc?= =?us-ascii?Q?H/Vs7JYTtf1gSYOXnU1DW/b0UTLG3Eu/cqup6sz8uw/B237KppLTsu3Ibpoi?= =?us-ascii?Q?pq6+KeWapW/bYASiSqusTRhQmqJvV0MxF7bAAm9M+RB9MZDmuUcNBVnn9SjM?= =?us-ascii?Q?ylRyK+uwBq+cCBTIumbA9tB+J16VV3Zu7Xkaa9DxE3dNS71Q1eBbY4hypD34?= =?us-ascii?Q?hKkmvkKkDRJan4DbLC8nZEY2VnUy7Pk/z?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0202MB2552;6:K/8n8mgxJT08DqVV+RzhrHDcf1d4G/Ve68Go9uk+?= =?us-ascii?Q?07xmQRXy+51Ofp7oVbR/r0tzZtWIoCz9zu213+oMRHF+5blH9mfiGu14PuAt?= =?us-ascii?Q?XpKRcmTrlIj+UZ0vvFCJLs7XrI1H/nxSqZhqR+XlV8lpLNznClUoptWZzKZ7?= =?us-ascii?Q?PNROwMO1SlOpBosvAQsLTmqPNpOEhwokxES6mB2htoowPq3vsqkuFgP175Cl?= =?us-ascii?Q?2zU8N3HNeEQeOiPM5kzD5TCOWPsp1J6iKebHCXf3JixUny/zn/sSqlXfNQN1?= =?us-ascii?Q?wvAysfpJ+g/pxPAZ5FJia7MkT2gLNZK0lrXjvPTW5ebat1PKcweI4lkHnGht?= =?us-ascii?Q?TVXuIH/F9nbode7z25CvNG590pqZk0XiCbFWgS6rd7FM2juEzyP74iDSpNYt?= =?us-ascii?Q?fgtGGirxEouF1k3pD+6NkyG4ug+qyo21u58WuDs8FCMO0VdZhp42TeQIE/zP?= =?us-ascii?Q?QWrySOh7TY0FrIkmMgpfxZqaomV0pgk7c7ly8NPFC+n7zmDGeQlyTJ84PPHZ?= =?us-ascii?Q?Ao2xpoWJ4z+1ZnKjO2ErcY4as1sxfCMPGBpBAUJQxkzTl+3GjAfon9iVAY4N?= =?us-ascii?Q?m/U8y1/LxtCxu+ct1cHY7WG0PMIpDmAxvXSdZkvCGuSTmOPkPGmRsietb8iy?= =?us-ascii?Q?EnDF6UvdgZjzcmJvZlMKOJYTvSpjGwyCRsmGQXYR4ZGvJWcBcr/JBrP73U17?= =?us-ascii?Q?tzGaGtCedIzU/3xLQNRqo17hglyb/mhUNMZ3odXZci77OUDWPKIcE9UQQLfS?= =?us-ascii?Q?Um3KSD3AeZuVrwXIJGYGlQQbxI+ZwOaDEUjjpjbxoiK4RVnoDJL4qf0jhyae?= =?us-ascii?Q?jbOn5uaytmvG6ymNWji5inN6eXL7BNCGriW0ZwGFxObkH11JMna6RaKfjzso?= =?us-ascii?Q?70PcT9ANsuseL26mmi1nzjSPBD3rW5AaRimTVkQ44JB21sA2w79ZX8ijpLfX?= =?us-ascii?Q?tlRNlfsymEhHH6V57gCDUVWYFVowwKRe7TMwupsmh4BOshBJC9UNFVeN+My4?= =?us-ascii?Q?WBg=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;5:QlyHj9zLQxjdgX0H55RZvlaELzXm8fHfr6GeMuCLXYO0L+49YYMBkRtZ29qbpgt9NZe5gf3uY5/jxkZ85HKfbymsuEnczvPMX7bkZMDXBH5iI5h1A5oa5Vqsx2ZwJ09Mz9W5dYzJ4vnnJH95E34uM5eBJ7HJRzxi3N/Qn1aE9TWiVeKerlM3UTB8lXtph5t69ME5vzTx8+DIL19chSt7Qq7hBaCyQVnCA1y5VbkalQUkmO+t/S8B017SP7TuAmEodRgTj2jAlYcnm70dH5eArdMyABMf1vB1XsQ7NvTcS0+rzU88lmaU/gRRqdx+J+kiNIuPynruovuSVmBbLC9+cFmu6pIzTIP1vPukVOm8vNIseYlj91k1eT62NFRwLp0JBrcKk3opvT8LGe6mxTnsotC+0oyCtsgerahNBktjk7VC+1ZQdjc302JRsEhjFlLB4hTMmxUlxikHU4ZuJ3q2fhPM1LaSatDeALdNV+qghTVHw/vQNv/U74741A6jqszY;24:bhivR7+YuUFfrlG46eUaRYu17BQYWMJeupXw307Poa1RnbG1a2rKneq/fXbt2npnogEZl1pMZk0WqsDugDoowN/6MjuV5oxwHW7EqF3P4sA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0202MB2552;7:OEIJ6qyqVJL7CdfgH9T1/vgcCwk5y/uUj/tJMKUyVdfsBO2DhGMlHXru6oWaeaoyLExnl/bGFY81pJykr7Ztdit4WcsXMZwLPPqpWZVPec3N6VfcRnFZDg0pdff8+9ZA86tj9dBUqHYQ+yEsoGgFE+vJrUf03ijnHLl6qMmBG4DnMIF65YfCozmKpfoc8WNIZSu03lzDg336QDEqVpbVEtQkYLAWea+A9720zd8OVxWP2GnIx9pAJdUmL/WDaVCe9P2hgaDJf1IV9Nn53jhCbqglLGr5OCMJkk4Gu5IXMQSQbfcmn2/B9cQ7RIrKufwty0uxsylgd+UBz8kL7dj2wxP9E7LCMvzRfzQAUQvHrs/biEU+YUIF8b1ObBZKdl9v9BlW6xRTWfLGOHZ7Oeo2E6iH38ZMQ2PfSwWC3HOsjLbEDhVCaxWEjJZ4280szn97EOKSDH7Ga89DOpkq3iufBBoql+wGISeERKyKVYM7CMUaEXyCMI2pVCOfSQd6t+A2riLH4d1ibaRo5xLf38LIiD2OO41sTtWLVMwBS4flr4CMiDBeR8yTweWUcdpwi8yJ9xZqFwa6D/HA2P8KH7rjdKWRo8Jr/HmxdE3d03numb4WGGyZFQ7Cfrb+rndkrQuj3AZ5z6iCEUrlf1yQWUybpYFV1MYGbktcxB1ZrcF4qbYigVZiM936xsFTaC9exb6G8X40ZMAKQXAV2jSxvjJmStmn5/tvxH7Z1SgvkchnsLfxgxsUOG1Jo4B1mXkMNKMTOkpqbHDKnyiBTxn7KzGrUG3tWqYIp7EynWABY3v3n5g= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2017 17:47:38.4445 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0202MB2552 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4468 Lines: 134 The clut is not synchronized with the drm gamma_lut state. Signed-off-by: Peter Rosin --- drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 53 ++++++++++++++++++++++++++ drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 12 +++++- drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 4 ++ 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c index 694adcc..4bee26e 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c @@ -140,6 +140,58 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc *c) cfg); } +static void +atmel_hlcdc_crtc_load_lut(struct drm_crtc *c) +{ + struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c); + struct atmel_hlcdc_dc *dc = crtc->dc; + uint16_t *red = c->gamma_store; + uint16_t *green = red + c->gamma_size; + uint16_t *blue = green + c->gamma_size; + int layer; + int idx; + + for (layer = 0; layer < ATMEL_HLCDC_MAX_LAYERS; layer++) { + if (!dc->layers[layer]) + continue; + + for (idx = 0; idx < ATMEL_HLCDC_CLUT_SIZE; idx++) { + u32 val = ((red[idx] << 8) & 0xff0000) | + (green[idx] & 0xff00) | + (blue[idx] >> 8); + + atmel_hlcdc_layer_write_clut(dc->layers[layer], + idx, val); + } + } +} + +void atmel_hlcdc_gamma_set(struct drm_crtc *c, + u16 r, u16 g, u16 b, int idx) +{ + if (idx < 0 || idx >= c->gamma_size) + return; + + c->gamma_store[idx] = r; + idx += c->gamma_size; + c->gamma_store[idx] = g; + idx += c->gamma_size; + c->gamma_store[idx] = b; +} + +void atmel_hlcdc_gamma_get(struct drm_crtc *c, + u16 *r, u16 *g, u16 *b, int idx) +{ + if (idx < 0 || idx >= c->gamma_size) + return; + + *r = c->gamma_store[idx]; + idx += c->gamma_size; + *g = c->gamma_store[idx]; + idx += c->gamma_size; + *b = c->gamma_store[idx]; +} + static enum drm_mode_status atmel_hlcdc_crtc_mode_valid(struct drm_crtc *c, const struct drm_display_mode *mode) @@ -319,6 +371,7 @@ static const struct drm_crtc_helper_funcs lcdc_crtc_helper_funcs = { .mode_set = drm_helper_crtc_mode_set, .mode_set_nofb = atmel_hlcdc_crtc_mode_set_nofb, .mode_set_base = drm_helper_crtc_mode_set_base, + .load_lut = atmel_hlcdc_crtc_load_lut, .disable = atmel_hlcdc_crtc_disable, .enable = atmel_hlcdc_crtc_enable, .atomic_check = atmel_hlcdc_crtc_atomic_check, diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c index 4f6ef07..9a09c73 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c @@ -601,6 +601,12 @@ static int atmel_hlcdc_dc_modeset_init(struct drm_device *dev) return 0; } +static const struct drm_fb_helper_funcs atmel_hlcdc_fb_cma_helper_funcs = { + .gamma_set = atmel_hlcdc_gamma_set, + .gamma_get = atmel_hlcdc_gamma_get, + .fb_probe = drm_fbdev_cma_create, +}; + static int atmel_hlcdc_dc_load(struct drm_device *dev) { struct platform_device *pdev = to_platform_device(dev->dev); @@ -664,8 +670,10 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev) platform_set_drvdata(pdev, dev); - dc->fbdev = drm_fbdev_cma_init(dev, 24, - dev->mode_config.num_connector); + dc->fbdev = drm_fbdev_cma_init_with_funcs2(dev, 24, + dev->mode_config.num_connector, + NULL, + &atmel_hlcdc_fb_cma_helper_funcs); if (IS_ERR(dc->fbdev)) dc->fbdev = NULL; diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h index 709f7b9..1b13224 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -448,6 +449,9 @@ void atmel_hlcdc_plane_irq(struct atmel_hlcdc_plane *plane); int atmel_hlcdc_plane_prepare_disc_area(struct drm_crtc_state *c_state); int atmel_hlcdc_plane_prepare_ahb_routing(struct drm_crtc_state *c_state); +void atmel_hlcdc_gamma_set(struct drm_crtc *c, u16 r, u16 g, u16 b, int idx); +void atmel_hlcdc_gamma_get(struct drm_crtc *c, u16 *r, u16 *g, u16 *b, int idx); + void atmel_hlcdc_crtc_irq(struct drm_crtc *c); int atmel_hlcdc_crtc_create(struct drm_device *dev); -- 2.1.4