From patchwork Mon Feb 22 01:55:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Maciej W. Rozycki" X-Patchwork-Id: 8370191 Return-Path: X-Original-To: patchwork-linux-fbdev@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E8CF4C0553 for ; Mon, 22 Feb 2016 01:56:07 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 124CE2035D for ; Mon, 22 Feb 2016 01:56:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 115E120357 for ; Mon, 22 Feb 2016 01:56:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752943AbcBVBza (ORCPT ); Sun, 21 Feb 2016 20:55:30 -0500 Received: from eddie.linux-mips.org ([148.251.95.138]:54110 "EHLO cvs.linux-mips.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752920AbcBVBz2 (ORCPT ); Sun, 21 Feb 2016 20:55:28 -0500 Received: (from localhost user: 'macro', uid#1010) by eddie.linux-mips.org with ESMTP id S27011662AbcBVBz1RhUvq (ORCPT + 1 other); Mon, 22 Feb 2016 02:55:27 +0100 Date: Mon, 22 Feb 2016 01:55:27 +0000 (GMT) From: "Maciej W. Rozycki" To: Jean-Christophe Plagniol-Villard , Tomi Valkeinen , Geert Uytterhoeven cc: linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 6/7] video: fbdev: pmag-ba-fb: Optimize Bt455 colormap addressing In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Use the address autoincrement feature when accessing successive palette entries and also skip loading a palette address in overlay register assesses which do not use that address. Provide a red/green/blue register sequencer reset helper for use in overlay register assesses where the state of the sequencer is not known. References: [1] "Bt454 Bt455 170 MHz Monolithic CMOS 16 Color Palette RAMDAC", Brooktree Corporation, Document Number: L454001, Rev. I Signed-off-by: Maciej W. Rozycki --- linux-bt455-cmap-addr.diff -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Index: linux-20160211-4maxp64/drivers/video/fbdev/bt455.h =================================================================== --- linux-20160211-4maxp64.orig/drivers/video/fbdev/bt455.h +++ linux-20160211-4maxp64/drivers/video/fbdev/bt455.h @@ -30,13 +30,17 @@ static inline void bt455_select_reg(stru regs->addr_cmap = ir & 0x0f; } +static inline void bt455_reset_reg(struct bt455_regs *regs) +{ + mb(); + regs->addr_clr = 0; +} + /* * Read/write to a Bt455 color map register. */ -static inline void bt455_read_cmap_entry(struct bt455_regs *regs, - int cr, u8 *grey) +static inline void bt455_read_cmap_next(struct bt455_regs *regs, u8 *grey) { - bt455_select_reg(regs, cr); mb(); regs->addr_cmap_data; rmb(); @@ -45,10 +49,8 @@ static inline void bt455_read_cmap_entry regs->addr_cmap_data; } -static inline void bt455_write_cmap_entry(struct bt455_regs *regs, - int cr, u8 grey) +static inline void bt455_write_cmap_next(struct bt455_regs *regs, u8 grey) { - bt455_select_reg(regs, cr); wmb(); regs->addr_cmap_data = 0x0; wmb(); @@ -57,10 +59,8 @@ static inline void bt455_write_cmap_entr regs->addr_cmap_data = 0x0; } -static inline void bt455_write_ovly_entry(struct bt455_regs *regs, - int cr, u8 grey) +static inline void bt455_write_ovly_next(struct bt455_regs *regs, u8 grey) { - bt455_select_reg(regs, cr); wmb(); regs->addr_ovly = 0x0; wmb(); @@ -68,3 +68,23 @@ static inline void bt455_write_ovly_entr wmb(); regs->addr_ovly = 0x0; } + +static inline void bt455_read_cmap_entry(struct bt455_regs *regs, + int cr, u8 *grey) +{ + bt455_select_reg(regs, cr); + bt455_read_cmap_next(regs, grey); +} + +static inline void bt455_write_cmap_entry(struct bt455_regs *regs, + int cr, u8 grey) +{ + bt455_select_reg(regs, cr); + bt455_write_cmap_next(regs, grey); +} + +static inline void bt455_write_ovly_entry(struct bt455_regs *regs, u8 grey) +{ + bt455_reset_reg(regs); + bt455_write_ovly_next(regs, grey); +} Index: linux-20160211-4maxp64/drivers/video/fbdev/pmag-aa-fb.c =================================================================== --- linux-20160211-4maxp64.orig/drivers/video/fbdev/pmag-aa-fb.c +++ linux-20160211-4maxp64/drivers/video/fbdev/pmag-aa-fb.c @@ -122,8 +122,8 @@ static int aafb_cursor(struct fb_info *i u8 bg = cursor->image.bg_color ? 0xf : 0x0; bt455_write_cmap_entry(par->bt455, 8, bg); - bt455_write_cmap_entry(par->bt455, 9, bg); - bt455_write_ovly_entry(par->bt455, 0, fg); + bt455_write_cmap_next(par->bt455, bg); + bt455_write_ovly_next(par->bt455, fg); } if (cursor->set & (FB_CUR_SETSIZE | FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) bt431_set_cursor(par->bt431, @@ -212,7 +212,7 @@ static int pmagaafb_probe(struct device /* Init colormap. */ bt455_write_cmap_entry(par->bt455, 0, 0x0); - bt455_write_cmap_entry(par->bt455, 1, 0xf); + bt455_write_cmap_next(par->bt455, 0xf); /* Init hardware cursor. */ bt431_erase_cursor(par->bt431);