From patchwork Mon Feb 19 16:58:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203204 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp1459004dyc; Mon, 19 Feb 2024 10:21:28 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWtxm7BKYSr5DB79hMDhAe5B62AlXUiwGbeNPxMgBpl6EqnWSwxZyktX+CRx13eX1mu3YUeCrhP8VgvstVoGelZkAYLrw== X-Google-Smtp-Source: AGHT+IH9isr3EXSNwSq/aPzzRnRgm/9clB1RPPQGLyOEZ5VBoMfAyMR4EFo/owoxf1qMbHcJIAf6 X-Received: by 2002:a17:907:944f:b0:a3e:5b55:db3 with SMTP id dl15-20020a170907944f00b00a3e5b550db3mr5637278ejc.29.1708366888611; Mon, 19 Feb 2024 10:21:28 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708366888; cv=pass; d=google.com; s=arc-20160816; b=XDyOReRv9e+Dc2ubc9/78jYVaCy/ka6EpJjsjiPBbPwbVTt/t4TLkW3DHWAilZN+4k Bcr8O5NsA4c+ZbBvXVxjOknEe1hXtTajFv+ftXnoQQZpkGyLVuNj281NndSRrE/cbqWZ 2/Z2zkVBLAQ9+epK1okjYOFiLaxLUi81G1+F37fGBMLJXPIvJu5TKkcDaCgMjSpV5veh zyvVIPaTRQWSdWrtM8KINP3K5kW0DiMj4qFW2PJoXTbuz/C8SvmyqhKrfFIwOqCuGF76 Bk0i67wlQfwdrKMYZQPPlCRb7f9cGzpIXs/La8gMy15PsiEZTvq4d2WEVopuZG8Koa59 1EdA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=mCEQKAlQXwgMsf5uLjq2oPP5KM5YygBhpALhKsOaBao=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=X0+8s5FucUUn+P18P30G7yn34VH3QEUgTat3yBZsokNNKPSVGy4u1mzbjLVL9znc71 MgcsNiJdejyXsG5PgJ+qW5st4OeyZkQ0EqJZWlspS3c2XffJIxUY/VdrNoswzuI5FKIV xhFAeO1nEQVzbdU9cyPCgoARjA0GHXOP1Z4H+YC/mFwTsTSz6Bs0M5E2/V9EZOA9ESiW jawwTYNfp7PKDv1m8pyi1XScdVSaqdJIC5iPJ0ROUp/U3BzhrgUFhmZoU9gM+2GJMAgN 1dBPrCrY4/R/1rOys9E0YUmF+u1pkD8HZRtdIKUZwV233DOucBDRCwLoM9k9BwBGQRBx AbXw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=aLyvLS4b; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71732-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71732-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id o10-20020a056402038a00b005643f11223dsi1918515edv.435.2024.02.19.10.21.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 10:21:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71732-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=aLyvLS4b; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71732-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71732-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id A57771F265A8 for ; Mon, 19 Feb 2024 17:06:16 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DA68E45C1C; Mon, 19 Feb 2024 17:03:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="aLyvLS4b" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5BB0446D0; Mon, 19 Feb 2024 17:03:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362232; cv=none; b=WZTmMCXroFDr4SMr62REn2x2pgSnghSWtBa4CDarkfb1RubQ3yFsK8bRQPXYQdzOLhJYGoGUoTuGRUqIoEn39R/rb/mKz1EK4mAEIDuwkZDj0RAEnHZt3eh3yYx0LZDKjB1a1anQlnfCFcXccBWdWvjkiWQ6sN7tu/NNNpuDw9U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362232; c=relaxed/simple; bh=2V6K2WvRgilQJzTyY5J8rzEpLbmO3v/oZJMKcEItRHM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pir6BP3NM2a0/xFsehlyPfEK7Y/6pgMkNN8hw3ljJuMWcRJIt8iLPuF8J0fElznd4UysUaPe015ghYG2I5KPwksxHtGDRx5mYi+HhxywG+7keD52A4XqEA16zQjir9chc1QZfpfpBb2uYjAY0l7J6c2XYoeYHRLr4zvltCemdjU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=aLyvLS4b; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362230; x=1739898230; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2V6K2WvRgilQJzTyY5J8rzEpLbmO3v/oZJMKcEItRHM=; b=aLyvLS4bqrI8xOWRlUbrNiiKVrniNmO2Xtahk89YWh6Cnofh6jZ+wq9m gyi7/gIwWQdp/QEuO3fAgC5uzECCOhZtpdqZJLTOBaJqVGWGgFfo++E7/ 7Ad7Soi/gVLRc7YemOAvs5x1yYXH3jYu9WLbhYxMErafsM+U505xpR5xA MJeG6tP60LzAM+YfRAxnzd0NzQwIyQ0sEoQpgfm1ZLUH7SN17XbxIjyvt VvK5V9q8uVCtiPEL9x1WrPPP6niZyJpd0Tbv7yaIheGAyi8DG+0iNPgs+ 2tNarAb+rfAhYC6DfaDDI1r5vKBopou7glhJF0I+VMXcXvSXUEEfIMEu0 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577414" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577414" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315356" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315356" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:42 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 2E9AD2A6; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 1/9] auxdisplay: linedisp: Group display drivers together Date: Mon, 19 Feb 2024 18:58:00 +0200 Message-ID: <20240219170337.2161754-2-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791352518860511046 X-GMAIL-MSGID: 1791352518860511046 For better usability group the display drivers together in Kconfig and Makefile. With this we will have the following sections: - Character LCD - Samsung KS0108 LCD controller - Single character line display - Character LCD with non-conforming interface While at it, drop redundant 'default n' entries. Tested-by: Geert Uytterhoeven Signed-off-by: Andy Shevchenko --- drivers/auxdisplay/Kconfig | 296 +++++++++++++++++++----------------- drivers/auxdisplay/Makefile | 15 +- 2 files changed, 163 insertions(+), 148 deletions(-) diff --git a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kconfig index d944d5298eca..109ac253d160 100644 --- a/drivers/auxdisplay/Kconfig +++ b/drivers/auxdisplay/Kconfig @@ -16,6 +16,9 @@ menuconfig AUXDISPLAY if AUXDISPLAY +# +# Character LCD section +# config CHARLCD tristate "Character LCD core support" if COMPILE_TEST help @@ -25,12 +28,6 @@ config CHARLCD This is some character LCD core interface that multiple drivers can use. -config LINEDISP - tristate "Character line display core support" if COMPILE_TEST - help - This is the core support for single-line character displays, to be - selected by drivers that use it. - config HD44780_COMMON tristate "Common functions for HD44780 (and compatibles) LCD displays" if COMPILE_TEST select CHARLCD @@ -52,131 +49,6 @@ config HD44780 kernel and started at boot. If you don't understand what all this is about, say N. -config KS0108 - tristate "KS0108 LCD Controller" - depends on PARPORT_PC - default n - help - If you have a LCD controlled by one or more KS0108 - controllers, say Y. You will need also another more specific - driver for your LCD. - - Depends on Parallel Port support. If you say Y at - parport, you will be able to compile this as a module (M) - and built-in as well (Y). - - To compile this as a module, choose M here: - the module will be called ks0108. - - If unsure, say N. - -config KS0108_PORT - hex "Parallel port where the LCD is connected" - depends on KS0108 - default 0x378 - help - The address of the parallel port where the LCD is connected. - - The first standard parallel port address is 0x378. - The second standard parallel port address is 0x278. - The third standard parallel port address is 0x3BC. - - You can specify a different address if you need. - - If you don't know what I'm talking about, load the parport module, - and execute "dmesg" or "cat /proc/ioports". You can see there how - many parallel ports are present and which address each one has. - - Usually you only need to use 0x378. - - If you compile this as a module, you can still override this - using the module parameters. - -config KS0108_DELAY - int "Delay between each control writing (microseconds)" - depends on KS0108 - default "2" - help - Amount of time the ks0108 should wait between each control write - to the parallel port. - - If your LCD seems to miss random writings, increment this. - - If you don't know what I'm talking about, ignore it. - - If you compile this as a module, you can still override this - value using the module parameters. - -config CFAG12864B - tristate "CFAG12864B LCD" - depends on X86 - depends on FB - depends on KS0108 - select FB_SYSMEM_HELPERS - default n - help - If you have a Crystalfontz 128x64 2-color LCD, cfag12864b Series, - say Y. You also need the ks0108 LCD Controller driver. - - For help about how to wire your LCD to the parallel port, - check Documentation/admin-guide/auxdisplay/cfag12864b.rst - - Depends on the x86 arch and the framebuffer support. - - The LCD framebuffer driver can be attached to a console. - It will work fine. However, you can't attach it to the fbdev driver - of the xorg server. - - To compile this as a module, choose M here: - the modules will be called cfag12864b and cfag12864bfb. - - If unsure, say N. - -config CFAG12864B_RATE - int "Refresh rate (hertz)" - depends on CFAG12864B - default "20" - help - Refresh rate of the LCD. - - As the LCD is not memory mapped, the driver has to make the work by - software. This means you should be careful setting this value higher. - If your CPUs are really slow or you feel the system is slowed down, - decrease the value. - - Be careful modifying this value to a very high value: - You can freeze the computer, or the LCD maybe can't draw as fast as you - are requesting. - - If you don't know what I'm talking about, ignore it. - - If you compile this as a module, you can still override this - value using the module parameters. - -config IMG_ASCII_LCD - tristate "Imagination Technologies ASCII LCD Display" - depends on HAS_IOMEM - default y if MIPS_MALTA - select MFD_SYSCON - select LINEDISP - help - Enable this to support the simple ASCII LCD displays found on - development boards such as the MIPS Boston, MIPS Malta & MIPS SEAD3 - from Imagination Technologies. - -config HT16K33 - tristate "Holtek Ht16K33 LED controller with keyscan" - depends on FB && I2C && INPUT - select FB_SYSMEM_HELPERS - select INPUT_MATRIXKMAP - select FB_BACKLIGHT - select NEW_LEDS - select LEDS_CLASS - select LINEDISP - help - Say yes here to add support for Holtek HT16K33, RAM mapping 16*8 - LED controller driver with keyscan. - config LCD2S tristate "lcd2s 20x4 character display over I2C console" depends on I2C @@ -187,16 +59,6 @@ config LCD2S is a simple single color character display. You have to connect it to an I2C bus. -config ARM_CHARLCD - bool "ARM Ltd. Character LCD Driver" - depends on PLAT_VERSATILE - help - This is a driver for the character LCD found on the ARM Ltd. - Versatile and RealView Platform Baseboards. It doesn't do - very much more than display the text "ARM Linux" on the first - line and the Linux version on the second line, but that's - still useful. - menuconfig PARPORT_PANEL tristate "Parallel port LCD/Keypad Panel support" depends on PARPORT @@ -455,7 +317,6 @@ endif # PARPORT_PANEL config PANEL_CHANGE_MESSAGE bool "Change LCD initialization message ?" depends on CHARLCD - default "n" help This allows you to replace the boot message indicating the kernel version and the driver version with a custom message. This is useful on appliances @@ -504,8 +365,159 @@ choice endchoice +# +# Samsung KS0108 LCD controller section +# +config KS0108 + tristate "KS0108 LCD Controller" + depends on PARPORT_PC + help + If you have a LCD controlled by one or more KS0108 + controllers, say Y. You will need also another more specific + driver for your LCD. + + Depends on Parallel Port support. If you say Y at + parport, you will be able to compile this as a module (M) + and built-in as well (Y). + + To compile this as a module, choose M here: + the module will be called ks0108. + + If unsure, say N. + +config KS0108_PORT + hex "Parallel port where the LCD is connected" + depends on KS0108 + default 0x378 + help + The address of the parallel port where the LCD is connected. + + The first standard parallel port address is 0x378. + The second standard parallel port address is 0x278. + The third standard parallel port address is 0x3BC. + + You can specify a different address if you need. + + If you don't know what I'm talking about, load the parport module, + and execute "dmesg" or "cat /proc/ioports". You can see there how + many parallel ports are present and which address each one has. + + Usually you only need to use 0x378. + + If you compile this as a module, you can still override this + using the module parameters. + +config KS0108_DELAY + int "Delay between each control writing (microseconds)" + depends on KS0108 + default "2" + help + Amount of time the ks0108 should wait between each control write + to the parallel port. + + If your LCD seems to miss random writings, increment this. + + If you don't know what I'm talking about, ignore it. + + If you compile this as a module, you can still override this + value using the module parameters. + +config CFAG12864B + tristate "CFAG12864B LCD" + depends on X86 + depends on FB + depends on KS0108 + select FB_SYSMEM_HELPERS + help + If you have a Crystalfontz 128x64 2-color LCD, cfag12864b Series, + say Y. You also need the ks0108 LCD Controller driver. + + For help about how to wire your LCD to the parallel port, + check Documentation/admin-guide/auxdisplay/cfag12864b.rst + + Depends on the x86 arch and the framebuffer support. + + The LCD framebuffer driver can be attached to a console. + It will work fine. However, you can't attach it to the fbdev driver + of the xorg server. + + To compile this as a module, choose M here: + the modules will be called cfag12864b and cfag12864bfb. + + If unsure, say N. + +config CFAG12864B_RATE + int "Refresh rate (hertz)" + depends on CFAG12864B + default "20" + help + Refresh rate of the LCD. + + As the LCD is not memory mapped, the driver has to make the work by + software. This means you should be careful setting this value higher. + If your CPUs are really slow or you feel the system is slowed down, + decrease the value. + + Be careful modifying this value to a very high value: + You can freeze the computer, or the LCD maybe can't draw as fast as you + are requesting. + + If you don't know what I'm talking about, ignore it. + + If you compile this as a module, you can still override this + value using the module parameters. + +# +# Single character line display section +# +config LINEDISP + tristate "Character line display core support" if COMPILE_TEST + help + This is the core support for single-line character displays, to be + selected by drivers that use it. + +config IMG_ASCII_LCD + tristate "Imagination Technologies ASCII LCD Display" + depends on HAS_IOMEM + default y if MIPS_MALTA + select MFD_SYSCON + select LINEDISP + help + Enable this to support the simple ASCII LCD displays found on + development boards such as the MIPS Boston, MIPS Malta & MIPS SEAD3 + from Imagination Technologies. + +config HT16K33 + tristate "Holtek Ht16K33 LED controller with keyscan" + depends on FB && I2C && INPUT + select FB_SYSMEM_HELPERS + select INPUT_MATRIXKMAP + select FB_BACKLIGHT + select NEW_LEDS + select LEDS_CLASS + select LINEDISP + help + Say yes here to add support for Holtek HT16K33, RAM mapping 16*8 + LED controller driver with keyscan. + +# +# Character LCD with non-conforming interface section +# +config ARM_CHARLCD + bool "ARM Ltd. Character LCD Driver" + depends on PLAT_VERSATILE + help + This is a driver for the character LCD found on the ARM Ltd. + Versatile and RealView Platform Baseboards. It doesn't do + very much more than display the text "ARM Linux" on the first + line and the Linux version on the second line, but that's + still useful. + endif # AUXDISPLAY +# +# Deprecated options +# config PANEL tristate "Parallel port LCD/Keypad Panel support (OLD OPTION)" depends on PARPORT diff --git a/drivers/auxdisplay/Makefile b/drivers/auxdisplay/Makefile index 6968ed4d3f0a..9197ea34e2d6 100644 --- a/drivers/auxdisplay/Makefile +++ b/drivers/auxdisplay/Makefile @@ -5,12 +5,15 @@ obj-$(CONFIG_CHARLCD) += charlcd.o obj-$(CONFIG_HD44780_COMMON) += hd44780_common.o -obj-$(CONFIG_ARM_CHARLCD) += arm-charlcd.o +obj-$(CONFIG_HD44780) += hd44780.o +obj-$(CONFIG_LCD2S) += lcd2s.o +obj-$(CONFIG_PARPORT_PANEL) += panel.o + obj-$(CONFIG_KS0108) += ks0108.o obj-$(CONFIG_CFAG12864B) += cfag12864b.o cfag12864bfb.o -obj-$(CONFIG_IMG_ASCII_LCD) += img-ascii-lcd.o -obj-$(CONFIG_HD44780) += hd44780.o -obj-$(CONFIG_HT16K33) += ht16k33.o -obj-$(CONFIG_PARPORT_PANEL) += panel.o -obj-$(CONFIG_LCD2S) += lcd2s.o + obj-$(CONFIG_LINEDISP) += line-display.o +obj-$(CONFIG_IMG_ASCII_LCD) += img-ascii-lcd.o +obj-$(CONFIG_HT16K33) += ht16k33.o + +obj-$(CONFIG_ARM_CHARLCD) += arm-charlcd.o From patchwork Mon Feb 19 16:58:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203200 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp1445532dyc; Mon, 19 Feb 2024 10:01:26 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCV+LWrBvyBBrXm/aYLxQufV5vMsxCJNNAROmt0/uNycAKgnAXrCrkzzs/4PnAnlA0+yLkUE3IN6tYQ7+9emeaSyV1oU7A== X-Google-Smtp-Source: AGHT+IHuDWN9M/zUY3c0hsROog8aweqFgRL1palzKhQ6BE9/lSH2XB+K6z5EECp/IErKIc5jc0uG X-Received: by 2002:a05:6102:509e:b0:470:6327:968b with SMTP id bl30-20020a056102509e00b004706327968bmr1917817vsb.35.1708365685504; Mon, 19 Feb 2024 10:01:25 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708365685; cv=pass; d=google.com; s=arc-20160816; b=Z1fqWuvsg+/wNb2x+4UhrAu48fv4SZWog9E6TnLLIIgRNAvLmRyZIO74FKZuEIQj/2 APUFmLz3gN/B+3EzO6CZgqSQz6JEn/WY4IwynScEHEwTj9IUn5ptfwwh2ZDp+aE4jWvk 7X9EzBbHj5r3RNThMgMU4t72L6Rdj6brnY6n8OOW9TXTsuwb42ECm9up65K98LspBuWb 9ljG6KYWiZ5xOMMoZJH75jPJjAu609cRmpnWSFfRqaJBoR4y1NZGwgDcfNy9g6HkcXip zyX36xlZaDVtLiuWtO9+mVQ91TTTjvOCaOzzaYOu4NYY80p1Pu79gIigfADccFIFyfIN KC4g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=qpMiEOXrS5HTVTb4Ym39EvH9q3F8efsC5s//DfQ5hLA=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=CzipdTIXYcfcfyDvvXm6T8wDWgMCcWe7UXWYtrCjWqW4VEa3AL5hs7MOSzRpBgaZ0b nS+ziZRz/d+Ej7F5omdazbAvLu42jIi1HQYHR341bXDV4jnNRaPb1j63xfMiXUqcatX3 eOGs3m7J99ZxxiQpLXEm5eI7HGVuehg/MY76eBcWG7HijJmWZDh6jAZ3ehXFUq8hOT/L ety7izsIHw68RA3HlmxflwXi1K7K5klKedi3yWqWQA1WHftE5cnuYmRVZK4rKIIuW87a IxsDGh0QKhNMc4ToobSCmFHU07izksjKWxgpN1aF8wtd2JPZiRKanGeQw4rVQ6mMWbqx eptw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=je1kNWNv; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71728-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71728-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id j30-20020a0561023e1e00b004706c3cf930si49213vsv.739.2024.02.19.10.01.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 10:01:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71728-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=je1kNWNv; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71728-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71728-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 732D61C23C6F for ; Mon, 19 Feb 2024 17:05:06 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EA45D47F68; Mon, 19 Feb 2024 17:03:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="je1kNWNv" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C83B446A6; Mon, 19 Feb 2024 17:03:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362229; cv=none; b=lZ4nx9mXriOjtflHWY5/UfcWVa3Y7BGxHJlu6pfMRrwR3jw87uc7JDZb3rUYQXWQjsva7mP4kHS7uzNwohIjaL9VmJdoKQtKSHtpT4/JmE+25kK6ybpkCk6wDFkV94JjsNK9KNq9eSND1v+OSwfBvtQ2dX0iv0nI28g+l/3XUGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362229; c=relaxed/simple; bh=I61aQrfxe8pltYJ1/AfqQL0Uek1s8wSiEP8xqVGCwiU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jjZuzlcvqH93rgNKHGTKQpaY2Ww3aKfjhRbvq1GBsKvyX2TYFV76ZQZjL5U7qUfDxEgYrd+FyTsXrG+7+c7v7bPjs1liCDfnB0nXfdvCAmdgPGGXFjahN5alJd7tT3MtlIo+e5UIkKHm+b8NZ1QshQ/jyVNWf60zIWaf9jktMNM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=je1kNWNv; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362228; x=1739898228; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=I61aQrfxe8pltYJ1/AfqQL0Uek1s8wSiEP8xqVGCwiU=; b=je1kNWNvx5iwzn3/oevvCiwzXpA8S91tunkbfBdO/4e5JU9PrygS6zTL FGm9wJTm+gnYq5/r6YNR+A76xOWIaYivvELcUNRs01mwUZdJqeo8SwszD VGTSYWbtSA+uUqt9lFMNHKqzdeNgK7vMp7kibr2sbd0TbilMQuz0rWA0T Xrb+xuo2AIcdAmtyKjv3kYOMI7tlcjETJdIBVXuscag2BuJHtdY5oCVU4 bkUJ2ET/3DEA3G+HRdO8qMBhmG8qp8sGiZlUOAiynGYHFjAP6hki17a9Y AsDRa8LXwpIFSRwjyb5mds/qKv63uw31tFMygsdWosgayECZRGidQfzvG Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577405" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577405" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315353" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315353" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:42 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 392CC49C; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 2/9] auxdisplay: linedisp: Allocate buffer for the string Date: Mon, 19 Feb 2024 18:58:01 +0200 Message-ID: <20240219170337.2161754-3-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791351256060461677 X-GMAIL-MSGID: 1791351256060461677 Always allocate a buffer for the currently displayed characters. It makes the line display API simpler. Signed-off-by: Andy Shevchenko Reviewed-by: Geert Uytterhoeven --- drivers/auxdisplay/ht16k33.c | 8 +++----- drivers/auxdisplay/img-ascii-lcd.c | 17 +++++++---------- drivers/auxdisplay/line-display.c | 11 +++++++---- drivers/auxdisplay/line-display.h | 3 +-- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c index 32d3afd29177..19805f39a257 100644 --- a/drivers/auxdisplay/ht16k33.c +++ b/drivers/auxdisplay/ht16k33.c @@ -92,7 +92,6 @@ struct ht16k33_seg { struct seg14_conversion_map seg14; } map; unsigned int map_size; - char curr[4]; }; struct ht16k33_priv { @@ -457,7 +456,7 @@ static void ht16k33_seg7_update(struct work_struct *work) struct ht16k33_priv *priv = container_of(work, struct ht16k33_priv, work.work); struct ht16k33_seg *seg = &priv->seg; - char *s = seg->curr; + char *s = seg->linedisp.buf; uint8_t buf[9]; buf[0] = map_to_seg7(&seg->map.seg7, *s++); @@ -478,7 +477,7 @@ static void ht16k33_seg14_update(struct work_struct *work) struct ht16k33_priv *priv = container_of(work, struct ht16k33_priv, work.work); struct ht16k33_seg *seg = &priv->seg; - char *s = seg->curr; + char *s = seg->linedisp.buf; uint8_t buf[8]; put_unaligned_le16(map_to_seg14(&seg->map.seg14, *s++), buf); @@ -700,8 +699,7 @@ static int ht16k33_seg_probe(struct device *dev, struct ht16k33_priv *priv, if (err) return err; - err = linedisp_register(&seg->linedisp, dev, 4, seg->curr, - &ht16k33_linedisp_ops); + err = linedisp_register(&seg->linedisp, dev, 4, &ht16k33_linedisp_ops); if (err) goto err_remove_map_file; diff --git a/drivers/auxdisplay/img-ascii-lcd.c b/drivers/auxdisplay/img-ascii-lcd.c index ecfb1c05bf55..925c4cd101e9 100644 --- a/drivers/auxdisplay/img-ascii-lcd.c +++ b/drivers/auxdisplay/img-ascii-lcd.c @@ -37,7 +37,6 @@ struct img_ascii_lcd_config { * @regmap: the regmap through which LCD registers are accessed * @offset: the offset within regmap to the start of the LCD registers * @cfg: pointer to the LCD model configuration - * @curr: the string currently displayed on the LCD */ struct img_ascii_lcd_ctx { struct linedisp linedisp; @@ -47,7 +46,6 @@ struct img_ascii_lcd_ctx { }; u32 offset; const struct img_ascii_lcd_config *cfg; - char curr[] __aligned(8); }; /* @@ -61,12 +59,12 @@ static void boston_update(struct linedisp *linedisp) ulong val; #if BITS_PER_LONG == 64 - val = *((u64 *)&ctx->curr[0]); + val = *((u64 *)&linedisp->buf[0]); __raw_writeq(val, ctx->base); #elif BITS_PER_LONG == 32 - val = *((u32 *)&ctx->curr[0]); + val = *((u32 *)&linedisp->buf[0]); __raw_writel(val, ctx->base); - val = *((u32 *)&ctx->curr[4]); + val = *((u32 *)&linedisp->buf[4]); __raw_writel(val, ctx->base + 4); #else # error Not 32 or 64 bit @@ -93,7 +91,7 @@ static void malta_update(struct linedisp *linedisp) for (i = 0; i < linedisp->num_chars; i++) { err = regmap_write(ctx->regmap, - ctx->offset + (i * 8), ctx->curr[i]); + ctx->offset + (i * 8), linedisp->buf[i]); if (err) break; } @@ -195,7 +193,7 @@ static void sead3_update(struct linedisp *linedisp) err = regmap_write(ctx->regmap, ctx->offset + SEAD3_REG_LCD_DATA, - ctx->curr[i]); + linedisp->buf[i]); if (err) break; } @@ -236,7 +234,7 @@ static int img_ascii_lcd_probe(struct platform_device *pdev) struct img_ascii_lcd_ctx *ctx; int err; - ctx = devm_kzalloc(dev, sizeof(*ctx) + cfg->num_chars, GFP_KERNEL); + ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); if (!ctx) return -ENOMEM; @@ -253,8 +251,7 @@ static int img_ascii_lcd_probe(struct platform_device *pdev) return PTR_ERR(ctx->base); } - err = linedisp_register(&ctx->linedisp, dev, cfg->num_chars, ctx->curr, - &cfg->ops); + err = linedisp_register(&ctx->linedisp, dev, cfg->num_chars, &cfg->ops); if (err) return err; diff --git a/drivers/auxdisplay/line-display.c b/drivers/auxdisplay/line-display.c index 13be7c2f6bc3..e2b546210f8d 100644 --- a/drivers/auxdisplay/line-display.c +++ b/drivers/auxdisplay/line-display.c @@ -265,6 +265,7 @@ static void linedisp_release(struct device *dev) kfree(linedisp->map); kfree(linedisp->message); + kfree(linedisp->buf); ida_free(&linedisp_id, linedisp->id); } @@ -316,14 +317,12 @@ static int linedisp_init_map(struct linedisp *linedisp) * @linedisp: pointer to character line display structure * @parent: parent device * @num_chars: the number of characters that can be displayed - * @buf: pointer to a buffer that can hold @num_chars characters * @ops: character line display operations * * Return: zero on success, else a negative error code. */ int linedisp_register(struct linedisp *linedisp, struct device *parent, - unsigned int num_chars, char *buf, - const struct linedisp_ops *ops) + unsigned int num_chars, const struct linedisp_ops *ops) { int err; @@ -331,7 +330,6 @@ int linedisp_register(struct linedisp *linedisp, struct device *parent, linedisp->dev.parent = parent; linedisp->dev.type = &linedisp_type; linedisp->ops = ops; - linedisp->buf = buf; linedisp->num_chars = num_chars; linedisp->scroll_rate = DEFAULT_SCROLL_RATE; @@ -343,6 +341,11 @@ int linedisp_register(struct linedisp *linedisp, struct device *parent, device_initialize(&linedisp->dev); dev_set_name(&linedisp->dev, "linedisp.%u", linedisp->id); + err = -ENOMEM; + linedisp->buf = kzalloc(linedisp->num_chars, GFP_KERNEL); + if (!linedisp->buf) + goto out_put_device; + /* initialise a character mapping, if required */ err = linedisp_init_map(linedisp); if (err) diff --git a/drivers/auxdisplay/line-display.h b/drivers/auxdisplay/line-display.h index 4e310b0e611e..4348d7a2f69a 100644 --- a/drivers/auxdisplay/line-display.h +++ b/drivers/auxdisplay/line-display.h @@ -82,8 +82,7 @@ struct linedisp { }; int linedisp_register(struct linedisp *linedisp, struct device *parent, - unsigned int num_chars, char *buf, - const struct linedisp_ops *ops); + unsigned int num_chars, const struct linedisp_ops *ops); void linedisp_unregister(struct linedisp *linedisp); #endif /* LINEDISP_H */ From patchwork Mon Feb 19 16:58:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203225 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2482:b0:108:f1d7:1f50 with SMTP id q2csp1474819dyi; Mon, 19 Feb 2024 11:31:41 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUEDTiIEMHLbJaPsq9H/SvvUpqLD8wJ3E2sMSmSCNyINyZYMhKs18jQwNpjXvqwE2i+J/2wwQYHa8e3O8JSkjxHTg7gjw== X-Google-Smtp-Source: AGHT+IGG4+lh5HEORJZ07IIkkJXt2rVA10wWEmE8xPo4yH9zVNpAMYDBukaMLM3UHcb1v8lBGdKw X-Received: by 2002:a17:906:a2d2:b0:a3e:b188:fcf3 with SMTP id by18-20020a170906a2d200b00a3eb188fcf3mr1959611ejb.48.1708371101546; Mon, 19 Feb 2024 11:31:41 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708371101; cv=pass; d=google.com; s=arc-20160816; b=QrCZD198caTtRyJJJV4BxkrMFqS65WP38fXYuW3DUXgMYqm0ZtHnG2sLkjw3jCW0oF +Ua/b0rAVhLCYNtbb/H4ZMgaGPnCmudSOxlp5r8v7rEg1DxJwsISQWBypD+1XitdI2OQ XlZQmZUeqFgXsc68hZL80MC7EhjYP0hBBT3qG9xmGTvxFHy/tJMFjhZD4Phvq6zdLuMx VE6EjHrPPIJwsP7dF0+toi3fgC6SSP0WeJDnVLj/HfvTrl2bzkxSMFzMs8n4mtMKzemj OYoZrC4uSV/B7JeKLCPgPtme0rW6vzlMFh8fsRZH/5v5FdLnpVN08weO/kijnRYDhWiE +lBQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=h+7K8pGmltXtHoGaGEGBxiuCRU5u8Kj4MzXLFBFanmQ=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=WSBCGrjlXLLMoEqvzMjZYotBljteqc0CcwWFyBvS4Z74O4DGKIy992fA5QXIvSNJfa P6taRHOVvDIpXwyc3cCdC42v1QqCpJypQZx9aOxOUFB1wt/GOSnqUeAK6deFJucbb+Gu Ce7DsiwaOanZgInXm1alcsQj6LiB+elcElE1YsCv4jF/MEc558cK9mJGTz1CLGEPkAdo ++AQfL5Tu0y1girHHPD4CbsPUmnBMCgkxUDisa1WUcPjFB+Bxtb0Ik8oEPP2MYB03pXv iqhTJ6GTRisJ8i40DMWdyIcR5aufT+q6pmjSCFFLW+qY1AkWj+zQi/UNL2YFTuO5RUzt aOHw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=IHxkQt26; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71729-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71729-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id qw11-20020a1709066a0b00b00a3ee9305aebsi105253ejc.862.2024.02.19.11.31.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 11:31:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71729-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=IHxkQt26; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71729-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71729-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 9F5FC1F25F8D for ; Mon, 19 Feb 2024 17:05:04 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DA13647F78; Mon, 19 Feb 2024 17:03:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="IHxkQt26" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45241446BF; Mon, 19 Feb 2024 17:03:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362231; cv=none; b=Z3WXs/D3j0NYyEHG5dOL39PhEdEHYnEtXbN1g6k1fyp3jrq9VcD4IJPDfsFo+iO8Yysi0q+QkStURewSpZgP9LU4742JxSS4vZKwsK7N3q+NBr2lQskbfPx3M/MakSTVXwKQGEXDK5UcaSloUSzQiyGitw2zH3ebfsX2tA/qXCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362231; c=relaxed/simple; bh=GmwQL6cecvWhO8sF6HOT2jJDb+yjghM1Cc5l5FQr/Hk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Uj0NXxAdSt4rXU9BL52JorkAbY13v40su71nql3BzkuRjjP5q3+OthsHR1pp2lagtqPNzHy22J6EDfiPYa4gXdI0VvoLE0RQ8rn/bR/09bA1OGiIzFDr9rBo1Z93KSdhoClB685iXj5tMjedzd3aa52PklzB4ed6rpXapBZRQek= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=IHxkQt26; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362229; x=1739898229; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=GmwQL6cecvWhO8sF6HOT2jJDb+yjghM1Cc5l5FQr/Hk=; b=IHxkQt26MD53QHbjantoBkHAXwDBTdXbMH8It6CwEsZsh4H1Ls/stYtX 4ERGX3MDRY6rZNmo9xvGBKkdAKroyqpJIbnehHw43cdMgT4h4U69s60cc aDJ1QNhpzH85STgB8vsQfg0etIMVMs20ZV9zexoTfe6ZOrqtXmX1WiwhL iNw4bQXSiCdGkCsQ0ci6SuvWhMj8yUMvxvKA+YQGo9fNGAZVWhnfdxHH8 tMbFXI3aR5Fyen2B3T0gmw18qKDdWKR0LojKOZuzoO+BDu4slH8/zRjuL W44xJKcf4ZX2DLOe+vW4tq1e+pmXopho+0zIL9zeEvbWz7R/BR+aRrd8O A==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577410" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577410" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315354" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315354" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:42 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 48BBD52F; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 3/9] auxdisplay: ht16k33: Add default to switch-cases Date: Mon, 19 Feb 2024 18:58:02 +0200 Message-ID: <20240219170337.2161754-4-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791356936085134346 X-GMAIL-MSGID: 1791356936085134346 Currently the compiler (GCC) is able to figure out that there is no other choices possible than those that are already listed in the switch-cases. However, if we want to move some code to the callback, compiler will start complaining that no default is defined. Make sure we have all switch-cases equiped with default. Reported-by: Geert Uytterhoeven Signed-off-by: Andy Shevchenko Reviewed-by: Geert Uytterhoeven --- drivers/auxdisplay/ht16k33.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c index 19805f39a257..c0067a3b2b61 100644 --- a/drivers/auxdisplay/ht16k33.c +++ b/drivers/auxdisplay/ht16k33.c @@ -677,11 +677,6 @@ static int ht16k33_seg_probe(struct device *dev, struct ht16k33_priv *priv, return err; switch (priv->type) { - case DISP_MATRIX: - /* not handled here */ - err = -EINVAL; - break; - case DISP_QUAD_7SEG: INIT_DELAYED_WORK(&priv->work, ht16k33_seg7_update); seg->map.seg7 = initial_map_seg7; @@ -695,6 +690,9 @@ static int ht16k33_seg_probe(struct device *dev, struct ht16k33_priv *priv, seg->map_size = sizeof(seg->map.seg14); err = device_create_file(dev, &dev_attr_map_seg14); break; + + default: + return -EINVAL; } if (err) return err; @@ -772,6 +770,9 @@ static int ht16k33_probe(struct i2c_client *client) /* Segment Display */ err = ht16k33_seg_probe(dev, priv, dft_brightness); break; + + default: + return -EINVAL; } return err; } @@ -796,6 +797,9 @@ static void ht16k33_remove(struct i2c_client *client) device_remove_file(&client->dev, &dev_attr_map_seg7); device_remove_file(&client->dev, &dev_attr_map_seg14); break; + + default: + break; } } From patchwork Mon Feb 19 16:58:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203278 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp36668dyc; Mon, 19 Feb 2024 13:01:47 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVr78CPNeg12WJ5bZ0UKee6q4xZF1LttdHbhCNzo9XIOkd+RzBXCBVUA50Co2+2SPx9/z1HbFq7/pr4VehuZp0yAzcclw== X-Google-Smtp-Source: AGHT+IHK1VtPsLZCa1mjwtu0W9nPIZYVF8er6dYwW3ZSkpEhA5Orr3UxICJYvNxu4A1k7sHewTcd X-Received: by 2002:a17:906:bc47:b0:a3e:be93:d77e with SMTP id s7-20020a170906bc4700b00a3ebe93d77emr1775216ejv.38.1708376507010; Mon, 19 Feb 2024 13:01:47 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708376506; cv=pass; d=google.com; s=arc-20160816; b=HBjea8MOlUWYtDbkAZzn8R+Av1mXTuvcWbMdAmpjoS00qeyZFRnyyBEVf/7JAHUs4W oTK9wSbaxXHysTOpR8AyF97PVXHCPzCx1ULvKVD6H0Lzalc/L++lFp/7nZvJWfz5LCKS iRzrPl7hXJQrr4MqhFVBadeOIlrIpG/DD8vJ8/EDk0LNqkFdEqjw8S43VuPsygzyA1+A l7rOq4Dcq9tdNww7gb/ypuepoGhKIM4nHeGl2kcivK2JppWiZBEVmOYC06xstDOw4HZO JmFv6SGrbtA+xEYbSksYDcSG6peyC2iy27E04xKEdac7cd5pd8q3wRPuvbGAq0vOfeAN q/jQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=WW5EUOYYqnlf3rArCutboAG/IUsJ58DWupMYqscbeEc=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=vwXJmQLPr+umPcwCMucvtRnJ0R03SP7l/1WNWWwuSzgeudu2Nsj1ZfgSNL7TWONJck X4nDQNsgoMkikHdVSNKHP4UW0laS7IzRGZO3e5M1AoktYgtRbK+ADeamud7jAuQM2AMv QTLBCB+Tk/V+wL6U3pGvk8oe96zMsQmD9YIG1yPF8c8GqW1EM2gxsGcW4qkvP7z2lRH1 SRc6EBVMV74oXQ73j4e81Ho8cp7AjuuQBXCbgdeQaV5KPFiPmKtjWBU2eHex7yOguC2V mLfMhxASYBHb5DpdHzINR0Pv3WT7NjOaZi/8TPRkcTS403YzvD6EpdLn+xVKWmE9iCLE rUXw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PfjDJyUN; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71726-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71726-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id ds13-20020a170907724d00b00a3e0fdcff27si2645757ejc.464.2024.02.19.13.01.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 13:01:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71726-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PfjDJyUN; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71726-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71726-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 072F31F25B2A for ; Mon, 19 Feb 2024 17:04:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 83B2344C7F; Mon, 19 Feb 2024 17:03:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="PfjDJyUN" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDA7B44389; Mon, 19 Feb 2024 17:03:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362227; cv=none; b=WLL4JAr1T4lqBwQwGcK4xAWhDjFtum6VySHzDYUjaw4p98txLHVFNRG0j3A0g74zaSljLCDL8n5+GbzbxyJHtqmrGFI/1yacvBRKtTclXXauvJWhOy3vQc2Xq3xR4i5fteo6hrXo9gKxebwY/Pl7xjS9sltq/jYsVNpTRSjJcmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362227; c=relaxed/simple; bh=38IkFeeB3s9t528Gme98k0LsxVPPJCADBjB36ZdncEc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mGYxGMKjKrCZE3YZrfPhfPl4ISTfFTfBWYsdF/nv0++wk9A4nn3laz4srp4XdyIlTU7jDvKqi8ySDgYbqNntoYwSxEJEXwyZznP9EZpqxB2A1H05Q+o1WWPm9auRbVEZQPCmpDipL9xtjijPITMhQCJoaKrxY/z0uQgheta8tn0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=PfjDJyUN; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362226; x=1739898226; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=38IkFeeB3s9t528Gme98k0LsxVPPJCADBjB36ZdncEc=; b=PfjDJyUNjywbKHx49UXA75KfMSxu7MVNrydPJMAp5lkfYl0iawkllXkw wP25bOkRoATOV7SXm2g0WvmS5rw7u9PIFHK02fyV8UhrRw9PfBCoUdp2R eEg5iojQn6gfpqGz332Z9zgrt65kJ0uRkDAW2ywCW76mGLif0XKqL1k8z ZVLAvokNyUTxWTYX/vcN5g9KKTP0Hx9qqN/SvNbFEOhR2DCGv3w6cpdmY ZP3+FDsjI+WDuLvSe45ssNmEsdyeNsrPVPpIgNa/7HTRryXwb1NyblsHn N6rNQHkSbp6r5fOgY3aa3In5neLBKCAsD2v/yecADdjR19oRC96zPlHOT A==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577393" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577393" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315355" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315355" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:42 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 585CAAE0; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 4/9] auxdisplay: ht16k33: Move ht16k33_linedisp_ops down Date: Mon, 19 Feb 2024 18:58:03 +0200 Message-ID: <20240219170337.2161754-5-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791362604532082855 X-GMAIL-MSGID: 1791362604532082855 We will need the update functions to be defined before ht16k33_linedisp_ops. Move the latter down in the code. No functional change intended. Reviewed-by: Geert Uytterhoeven Acked-by: Robin van der Gracht Tested-by: Geert Uytterhoeven Signed-off-by: Andy Shevchenko --- drivers/auxdisplay/ht16k33.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c index c0067a3b2b61..f016130835b1 100644 --- a/drivers/auxdisplay/ht16k33.c +++ b/drivers/auxdisplay/ht16k33.c @@ -439,18 +439,6 @@ static void ht16k33_keypad_stop(struct input_dev *dev) disable_irq(keypad->client->irq); } -static void ht16k33_linedisp_update(struct linedisp *linedisp) -{ - struct ht16k33_priv *priv = container_of(linedisp, struct ht16k33_priv, - seg.linedisp); - - schedule_delayed_work(&priv->work, 0); -} - -static const struct linedisp_ops ht16k33_linedisp_ops = { - .update = ht16k33_linedisp_update, -}; - static void ht16k33_seg7_update(struct work_struct *work) { struct ht16k33_priv *priv = container_of(work, struct ht16k33_priv, @@ -488,6 +476,18 @@ static void ht16k33_seg14_update(struct work_struct *work) i2c_smbus_write_i2c_block_data(priv->client, 0, ARRAY_SIZE(buf), buf); } +static void ht16k33_linedisp_update(struct linedisp *linedisp) +{ + struct ht16k33_priv *priv = container_of(linedisp, struct ht16k33_priv, + seg.linedisp); + + schedule_delayed_work(&priv->work, 0); +} + +static const struct linedisp_ops ht16k33_linedisp_ops = { + .update = ht16k33_linedisp_update, +}; + static int ht16k33_led_probe(struct device *dev, struct led_classdev *led, unsigned int brightness) { From patchwork Mon Feb 19 16:58:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203280 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp45868dyc; Mon, 19 Feb 2024 13:20:58 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWLGSFRiJjTS+4koFg5BjDDn52kyufY6pW4dwNVWv66szzj/A1w3+tLiL66GT6icQi4is4kVMU8dyJOnC/Zkp8ADI8J0g== X-Google-Smtp-Source: AGHT+IHhQu6g5++gTWXMqRzahltVALKp7TwE03h7eDHmOtn1eXhhHM0PeY13l/00urY27gwlvVQU X-Received: by 2002:a17:902:bc86:b0:1d9:7ab0:5e20 with SMTP id bb6-20020a170902bc8600b001d97ab05e20mr14200043plb.69.1708377658438; Mon, 19 Feb 2024 13:20:58 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708377658; cv=pass; d=google.com; s=arc-20160816; b=zppR4WA+bFiyXPXnE0bh47+C+c3w7xNIPZvR9ycsmUpVYWc2yUg0bjqoIAEmG0tH4h nix3Vqp3lshj0WMdLk9eAsnhOHm326Of/UBgDPM6nlFWBNHt4DeqWG/sIyz907PYYLgj NUrVbCKfJFPzeul11Jeh4qnnt5fF2pXRWEaVPO2GFWsYRCS7dUhQEj8GjHAYinJm4zNf aY8UCT4oCzbYTRcOdMB9yIT2gq+8/alpbVC/jNeGumuJhh6QYgc18q7R7k/cI7xVQ99O znhSRt8heh+GM02ggAlnpn5ZDWMza7PfSSPwMoPxITx/5Gn8S/ecyKaBFwB61XF2+j+6 rZCQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=2FLRZHt+3h337Qbti+3R0ENxyz1yIS5pd4wnE0I9xkc=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=WSyyf3J4afYgBK/sgwrqCau6g6annrYqgTEYnPUbk8Ll8o8eG656dFHRqGXsASeV0J 1fg8nXz2RoMDczpt0heMhKmk7MhB5vHL3cvkqw8d5cIED/DdXHq4OX8D6fLXNK+23vxE LzrRWzQAZzPmLAg0oZ4IcFbb/+HC32vUmjq54LwJBH+4dfwn3kGv0f7wu+VhsvCqZpsa q6KmQaqHxq9qtP9WGU1giQ5DTQ+V1+1rqAW+2H0IdWbTI1OtzukJMo8BZrYfZSPNneg4 WsPCSGbd1GcfiS0fWPGbw3ePlmhYdlZ6qYZFhodXTzTlwknP80zsl/teix5/25dMah2g 4iSg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=HrDmBRPm; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71731-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71731-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id f7-20020a170902684700b001d74670ffbcsi4938121pln.290.2024.02.19.13.20.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 13:20:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71731-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=HrDmBRPm; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71731-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71731-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 884AF286ECA for ; Mon, 19 Feb 2024 17:05:46 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E7FDB48783; Mon, 19 Feb 2024 17:03:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="HrDmBRPm" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26FC244C93; Mon, 19 Feb 2024 17:03:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362232; cv=none; b=lMX2NYx+9BEdEtEvi+eS+Ce/2hFzaZ6+XZIfd0sk9nVJC6iUg3bpMx0u4pqQTh/ZPETsWI6pyzzsJckqUfpY4y+K/J/ASkb+Cir+wUHFiZSUPhQJ42toMieyC3lknaDZhyYfyjCfCASfhKiGVFfj4FNKrhvX0ObywudZfXCcas0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362232; c=relaxed/simple; bh=nTLPN95Vl8V4f80BsBvGNYRqiV1i3kk//8sITOoQ8ck=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=YE/ooqr4Po46CfkKdfl2Tb5FjJeUY2FiKDe37D9HEufATocrsuXlW4L7OSd1VgGsKC8SdMmmvg6i7VCrkwnmWX4rClvSkDHeH/aEcsWN2mnw6opAPgKsZ1BYn3dxJU324h2YvwmJDRgw9S+S5QWlNQoc0Yy1SI073g67WJKofVk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=HrDmBRPm; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362231; x=1739898231; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nTLPN95Vl8V4f80BsBvGNYRqiV1i3kk//8sITOoQ8ck=; b=HrDmBRPm5lUDbn4/JL6Ci2TMDGSFhUsDahImeHq/II8Bhtf2yiXiCgL6 VYPyYIXVNVmnWw5ZMpdk7JN3EyeToPjirfmM8mpMsG6mzr9U2zLylSHKA sEQWfAeQRDO9FmSBKqEue1QIMy511x7+iAqUgDZAoxhx0wjOOxOJq+QDv wq1NvQ4Q3ZM2ola1RC0LOtsRS/fqlsZDEGWnjWNBv5VJJcPRJWnwMySiV UnpYMEDbPgaOSkKWNnBbtJrF+4zUq5gFSmqljsd1oRgYN5xJXkSVnN+oF TKKepMoOwWIwfeT8kY3qoCf6ttk5FUCiuuq43eBPBHyfRmT+LVl2hk/o9 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577433" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577433" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315369" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315369" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:46 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 5E5863E5; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 5/9] auxdisplay: ht16k33: Define a few helper macros Date: Mon, 19 Feb 2024 18:58:04 +0200 Message-ID: <20240219170337.2161754-6-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791363811898650597 X-GMAIL-MSGID: 1791363811898650597 Define a few helper macros — wrappers on contaoner_of)() — for easier maintenance in the future. While at it, include missing container_of.h. Signed-off-by: Andy Shevchenko Reviewed-by: Geert Uytterhoeven --- drivers/auxdisplay/ht16k33.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c index f016130835b1..b76c4d83528f 100644 --- a/drivers/auxdisplay/ht16k33.c +++ b/drivers/auxdisplay/ht16k33.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -107,6 +108,15 @@ struct ht16k33_priv { uint8_t blink; }; +#define ht16k33_work_to_priv(p) \ + container_of(p, struct ht16k33_priv, work.work) + +#define ht16k33_led_to_priv(p) \ + container_of(p, struct ht16k33_priv, led) + +#define ht16k33_linedisp_to_priv(p) \ + container_of(p, struct ht16k33_priv, seg.linedisp) + static const struct fb_fix_screeninfo ht16k33_fb_fix = { .id = DRIVER_NAME, .type = FB_TYPE_PACKED_PIXELS, @@ -194,8 +204,7 @@ static int ht16k33_brightness_set(struct ht16k33_priv *priv, static int ht16k33_brightness_set_blocking(struct led_classdev *led_cdev, enum led_brightness brightness) { - struct ht16k33_priv *priv = container_of(led_cdev, struct ht16k33_priv, - led); + struct ht16k33_priv *priv = ht16k33_led_to_priv(led_cdev); return ht16k33_brightness_set(priv, brightness); } @@ -203,8 +212,7 @@ static int ht16k33_brightness_set_blocking(struct led_classdev *led_cdev, static int ht16k33_blink_set(struct led_classdev *led_cdev, unsigned long *delay_on, unsigned long *delay_off) { - struct ht16k33_priv *priv = container_of(led_cdev, struct ht16k33_priv, - led); + struct ht16k33_priv *priv = ht16k33_led_to_priv(led_cdev); unsigned int delay; uint8_t blink; int err; @@ -246,8 +254,7 @@ static void ht16k33_fb_queue(struct ht16k33_priv *priv) */ static void ht16k33_fb_update(struct work_struct *work) { - struct ht16k33_priv *priv = container_of(work, struct ht16k33_priv, - work.work); + struct ht16k33_priv *priv = ht16k33_work_to_priv(work); struct ht16k33_fbdev *fbdev = &priv->fbdev; uint8_t *p1, *p2; @@ -441,8 +448,7 @@ static void ht16k33_keypad_stop(struct input_dev *dev) static void ht16k33_seg7_update(struct work_struct *work) { - struct ht16k33_priv *priv = container_of(work, struct ht16k33_priv, - work.work); + struct ht16k33_priv *priv = ht16k33_work_to_priv(work); struct ht16k33_seg *seg = &priv->seg; char *s = seg->linedisp.buf; uint8_t buf[9]; @@ -462,8 +468,7 @@ static void ht16k33_seg7_update(struct work_struct *work) static void ht16k33_seg14_update(struct work_struct *work) { - struct ht16k33_priv *priv = container_of(work, struct ht16k33_priv, - work.work); + struct ht16k33_priv *priv = ht16k33_work_to_priv(work); struct ht16k33_seg *seg = &priv->seg; char *s = seg->linedisp.buf; uint8_t buf[8]; @@ -478,8 +483,7 @@ static void ht16k33_seg14_update(struct work_struct *work) static void ht16k33_linedisp_update(struct linedisp *linedisp) { - struct ht16k33_priv *priv = container_of(linedisp, struct ht16k33_priv, - seg.linedisp); + struct ht16k33_priv *priv = ht16k33_linedisp_to_priv(linedisp); schedule_delayed_work(&priv->work, 0); } From patchwork Mon Feb 19 16:58:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203252 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp9120dyc; Mon, 19 Feb 2024 11:55:40 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVOt1v6Ae8S1muRlK0gq9qSn9YzlJFCqkIv0O1MK85et1cLVHmskEVfOzGHtxcZ7V4Qac1Wh87spdFILPsaXa9G7bv8Qw== X-Google-Smtp-Source: AGHT+IFmqn4yv20DD14ahbA6v6rrqFOTK7I3qC1OyrU3FkcXlHjQAP4SgtDgeP7CgxnwymlTI0T3 X-Received: by 2002:a05:6214:528f:b0:68f:340d:d5ee with SMTP id kj15-20020a056214528f00b0068f340dd5eemr12260256qvb.1.1708372540400; Mon, 19 Feb 2024 11:55:40 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708372540; cv=pass; d=google.com; s=arc-20160816; b=UWNwgwD6fe01fbF5QBtcLKVMjPplLiwKXnvhnkaM8f4tKUiHZ7ttJJdUbf4Jj3vfXj YeqhzLBk4AZXlO7AC1b7ofCS/cSFKOw0IAYRZxngvkdFDV33cE63830n7eHqXg836rcr M+tXIt+AEY/0KIFsIexM3A2TPywv1v9yv+0Pk2PbZJzudIL/CMKqBLBlo2tombOwfGyx 4OGBGW2YmWBtfs5FhlpNtwggAIQKL7PNH9qEqfbhI0y8Y4PxKiQVGwvzXaPDyCee6KWd FLQMXvrLc7XaJJ5JPIv5X1h5Er+I0mJhPsbZwiJTR/zg02xnmYfPMCdx8zF2/7IgzxYi DIgQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=nIHbWA7yt2dyhQ2JEBrE1JigINzEn2tcqxYyrYSfq3k=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=ymnCHk5mzuhK7r0O4F+nFR1eDakmeF8UYab8gPMEhlBQ/p1h+QeZ1lpUpfqlArWjZ3 F0RcYmb1jLcUeF7TxppHzMyKNdGcXj5lv5ZZM8SetLnAr+yvKrgev4RRXU0R82RjUoIs qc7xLRVm+DILB8PjQfGITvLmtq0sY9IuVYyShmhcvACDx74+fg/zhruHXiybL6zVrwLy rwoj1TcwuoVYGrUDdDPoy1o3pGeA/TXHb1gGPLDyQa7BKvexVICYm8UxAdIfPOWQanuJ IULelrlEk09HmzUO0LbHsibrKPh6aOQvd5slTdSO4yYmypGv6neUyO0Yb3yWphZhQ8Cb Qfqw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=kgl0ETeR; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71735-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71735-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id q12-20020a056214194c00b0068f312ae8d9si6931543qvk.226.2024.02.19.11.55.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 11:55:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71735-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=kgl0ETeR; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71735-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71735-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 8BE651C242A7 for ; Mon, 19 Feb 2024 17:06:17 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3AC7648CE4; Mon, 19 Feb 2024 17:03:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="kgl0ETeR" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA4754654B; Mon, 19 Feb 2024 17:03:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362234; cv=none; b=jHCCpe2a6Km3jdyQVO09evKx1M/ulalgIQTcRYSu/IGRDCEORaNgoEhHKWgSXe6FcgwV1wDkPJj/PrQwYcUCdLVFW215aqwCeGmqhJ6B4ctzPCOg9ZogyfdDi8EShyGIzIUSmZ6i4dD8VwJMEIsLIInr7mqsJ05BH0QrQ4s6des= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362234; c=relaxed/simple; bh=OAnzBar8n/usXJ0HICa83AoPNDU5iTXFWBQdBXf9eqE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fXfEnrBD9oorBNIkA0FACxH90wLlC7V85J0eI2rF/aqLMaC1MqLtWKvcPvQQre/5CV7GVwL0c+EJqg86HgI/dPQVM5d8HGnCEWgx3hqrqGHEFoEu8GRqa8rXGMxYjGcOZgeIkSeZncjdIoPUO/WVnrEh7MceVXnew+q+KixRVrk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=kgl0ETeR; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362233; x=1739898233; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=OAnzBar8n/usXJ0HICa83AoPNDU5iTXFWBQdBXf9eqE=; b=kgl0ETeRz1Ecfh/YR3TUjTmclUgxXiNYGkSl/ul5Cv+VxmZ/+cBhb/GN 5hYRUY/BvxAjE18DTIajsmYFUPszqEjtN7nxlVjBBeXKol3LtPJjCJ3P9 /xlzy2TqhJoHzBSU6Z8HcK27UJlvmCSLqtrgLTKxGCEO7/nI3wv5CqjKn aCNSm3KuOesUWoy+0kTsz0ZupSxQroFuT1Ep33V8OO7b+xID4deqBcqSd NxhryS/7piBoIYOKmXN3JjJMkO4y4ka+6x5UyxwnSYdUvLmQBjcq79Z8t kIj7ttjUjPkGsgO/wPKnRlCWT13CFx9fujIE3LYNzX2uVIX9H8xUsnNeP A==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577447" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577447" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315373" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315373" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:46 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 6F8FFBF5; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 6/9] auxdisplay: ht16k33: Switch to use line display character mapping Date: Mon, 19 Feb 2024 18:58:05 +0200 Message-ID: <20240219170337.2161754-7-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791358444456381730 X-GMAIL-MSGID: 1791358444456381730 Since line display library supports necessary bits to map the characters (if required), switch this driver to use that. Reviewed-by: Geert Uytterhoeven Acked-by: Robin van der Gracht Tested-by: Geert Uytterhoeven Signed-off-by: Andy Shevchenko --- drivers/auxdisplay/ht16k33.c | 103 ++++++++++------------------------- 1 file changed, 30 insertions(+), 73 deletions(-) diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c index b76c4d83528f..41a961342dc3 100644 --- a/drivers/auxdisplay/ht16k33.c +++ b/drivers/auxdisplay/ht16k33.c @@ -88,11 +88,6 @@ struct ht16k33_fbdev { struct ht16k33_seg { struct linedisp linedisp; - union { - struct seg7_conversion_map seg7; - struct seg14_conversion_map seg14; - } map; - unsigned int map_size; }; struct ht16k33_priv { @@ -144,33 +139,6 @@ static const struct fb_var_screeninfo ht16k33_fb_var = { .vmode = FB_VMODE_NONINTERLACED, }; -static const SEG7_DEFAULT_MAP(initial_map_seg7); -static const SEG14_DEFAULT_MAP(initial_map_seg14); - -static ssize_t map_seg_show(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct ht16k33_priv *priv = dev_get_drvdata(dev); - - memcpy(buf, &priv->seg.map, priv->seg.map_size); - return priv->seg.map_size; -} - -static ssize_t map_seg_store(struct device *dev, struct device_attribute *attr, - const char *buf, size_t cnt) -{ - struct ht16k33_priv *priv = dev_get_drvdata(dev); - - if (cnt != priv->seg.map_size) - return -EINVAL; - - memcpy(&priv->seg.map, buf, cnt); - return cnt; -} - -static DEVICE_ATTR(map_seg7, 0644, map_seg_show, map_seg_store); -static DEVICE_ATTR(map_seg14, 0644, map_seg_show, map_seg_store); - static int ht16k33_display_on(struct ht16k33_priv *priv) { uint8_t data = REG_DISPLAY_SETUP | REG_DISPLAY_SETUP_ON | priv->blink; @@ -450,18 +418,19 @@ static void ht16k33_seg7_update(struct work_struct *work) { struct ht16k33_priv *priv = ht16k33_work_to_priv(work); struct ht16k33_seg *seg = &priv->seg; + struct linedisp_map *map = seg->linedisp.map; char *s = seg->linedisp.buf; uint8_t buf[9]; - buf[0] = map_to_seg7(&seg->map.seg7, *s++); + buf[0] = map_to_seg7(&map->map.seg7, *s++); buf[1] = 0; - buf[2] = map_to_seg7(&seg->map.seg7, *s++); + buf[2] = map_to_seg7(&map->map.seg7, *s++); buf[3] = 0; buf[4] = 0; buf[5] = 0; - buf[6] = map_to_seg7(&seg->map.seg7, *s++); + buf[6] = map_to_seg7(&map->map.seg7, *s++); buf[7] = 0; - buf[8] = map_to_seg7(&seg->map.seg7, *s++); + buf[8] = map_to_seg7(&map->map.seg7, *s++); i2c_smbus_write_i2c_block_data(priv->client, 0, ARRAY_SIZE(buf), buf); } @@ -470,17 +439,36 @@ static void ht16k33_seg14_update(struct work_struct *work) { struct ht16k33_priv *priv = ht16k33_work_to_priv(work); struct ht16k33_seg *seg = &priv->seg; + struct linedisp_map *map = seg->linedisp.map; char *s = seg->linedisp.buf; uint8_t buf[8]; - put_unaligned_le16(map_to_seg14(&seg->map.seg14, *s++), buf); - put_unaligned_le16(map_to_seg14(&seg->map.seg14, *s++), buf + 2); - put_unaligned_le16(map_to_seg14(&seg->map.seg14, *s++), buf + 4); - put_unaligned_le16(map_to_seg14(&seg->map.seg14, *s++), buf + 6); + put_unaligned_le16(map_to_seg14(&map->map.seg14, *s++), buf + 0); + put_unaligned_le16(map_to_seg14(&map->map.seg14, *s++), buf + 2); + put_unaligned_le16(map_to_seg14(&map->map.seg14, *s++), buf + 4); + put_unaligned_le16(map_to_seg14(&map->map.seg14, *s++), buf + 6); i2c_smbus_write_i2c_block_data(priv->client, 0, ARRAY_SIZE(buf), buf); } +static int ht16k33_linedisp_get_map_type(struct linedisp *linedisp) +{ + struct ht16k33_priv *priv = ht16k33_linedisp_to_priv(linedisp); + + switch (priv->type) { + case DISP_QUAD_7SEG: + INIT_DELAYED_WORK(&priv->work, ht16k33_seg7_update); + return LINEDISP_MAP_SEG7; + + case DISP_QUAD_14SEG: + INIT_DELAYED_WORK(&priv->work, ht16k33_seg14_update); + return LINEDISP_MAP_SEG14; + + default: + return -EINVAL; + } +} + static void ht16k33_linedisp_update(struct linedisp *linedisp) { struct ht16k33_priv *priv = ht16k33_linedisp_to_priv(linedisp); @@ -489,6 +477,7 @@ static void ht16k33_linedisp_update(struct linedisp *linedisp) } static const struct linedisp_ops ht16k33_linedisp_ops = { + .get_map_type = ht16k33_linedisp_get_map_type, .update = ht16k33_linedisp_update, }; @@ -680,37 +669,7 @@ static int ht16k33_seg_probe(struct device *dev, struct ht16k33_priv *priv, if (err) return err; - switch (priv->type) { - case DISP_QUAD_7SEG: - INIT_DELAYED_WORK(&priv->work, ht16k33_seg7_update); - seg->map.seg7 = initial_map_seg7; - seg->map_size = sizeof(seg->map.seg7); - err = device_create_file(dev, &dev_attr_map_seg7); - break; - - case DISP_QUAD_14SEG: - INIT_DELAYED_WORK(&priv->work, ht16k33_seg14_update); - seg->map.seg14 = initial_map_seg14; - seg->map_size = sizeof(seg->map.seg14); - err = device_create_file(dev, &dev_attr_map_seg14); - break; - - default: - return -EINVAL; - } - if (err) - return err; - - err = linedisp_register(&seg->linedisp, dev, 4, &ht16k33_linedisp_ops); - if (err) - goto err_remove_map_file; - - return 0; - -err_remove_map_file: - device_remove_file(dev, &dev_attr_map_seg7); - device_remove_file(dev, &dev_attr_map_seg14); - return err; + return linedisp_register(&seg->linedisp, dev, 4, &ht16k33_linedisp_ops); } static int ht16k33_probe(struct i2c_client *client) @@ -798,8 +757,6 @@ static void ht16k33_remove(struct i2c_client *client) case DISP_QUAD_7SEG: case DISP_QUAD_14SEG: linedisp_unregister(&priv->seg.linedisp); - device_remove_file(&client->dev, &dev_attr_map_seg7); - device_remove_file(&client->dev, &dev_attr_map_seg14); break; default: From patchwork Mon Feb 19 16:58:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203205 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp1460947dyc; Mon, 19 Feb 2024 10:24:56 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXFL6cP1GOzvys+GOsUHrdtN/MaQyO9EswJX5feqIT2Ejj8SXaebqjjoQMa50o0oFhSgKhaB6NeVKS6qQ9gdE5fVbSHOQ== X-Google-Smtp-Source: AGHT+IHoBW7si8DktfrWNzzmL5V5GWCTEfNgKyOPmBR82CET6siPU2OjsuQgPrHqKyAJar56vr3P X-Received: by 2002:a05:6a00:9287:b0:6e2:f54a:5ee4 with SMTP id jw7-20020a056a00928700b006e2f54a5ee4mr7462294pfb.13.1708367096116; Mon, 19 Feb 2024 10:24:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708367096; cv=pass; d=google.com; s=arc-20160816; b=OefOKS/0GNXhAUh4nw+e2Adrmfj+egfonc/M0AlP+j/21l2I3UtuSBnGddFsm+J4IS 9/jPY9DMtnaCvG5i6WnZSCWXrJLcS5/OrCZmxD/gx+RQkwXso0n9bxVNmNw2wAZ4r4Wp +VkhlKObKR/1/7zB5OkW8XcXRqGHKI82NbgvRDJh2e7Zto9SP0uLzaBLQIUr7iAaBgzv 2To8QA/b9RxmftiS6IONI41I1ydkULjbAoSWIcfIgZFf98VemyxheSl0G2aGCYgQg3kn 7DHGQh4dnOzahs2o37h0iAIcPPltulrcG684cCmqZ2Ib8EcbfZRXeqqv4Fz2nfCafHM8 9S6A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=xeaqGek5Qv86JTQ3Wd/kiIepESlyyeV2wOfNWjudo1M=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=iWUFtx3BB3XyCV88yYOlS6SsFTVBVqetlXwdWUuh+4R/pZgDtuW1/xcqS9hsWZKvRQ Mk1DHeawC/MgMYBF3l3SLcNtUqidcZid6LmhAc8YhqRPTY7n5dF4enxN/nSMjecpi4wL RXRn8rIySaPk25jJ5AwgETOYx4V5iJbjX/fdmixzxZGJl7EZVB4qMchul+dDEkL0PC+4 Vnp0fLWkC5mz46L3cj+371uH3uJbIQQDc9c3AKzCGvxXLcUoc5CEyAy+enqDwuv/62AN zL0uGlJJTTr4zH+9yJMv0CQDjBiAOrzd3A0tpxFOV9vxtmb56YRwAnkItY3tNgQwTJ8y 7GMw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=geU7p5P0; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71733-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71733-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id v185-20020a6389c2000000b005dc892da3cfsi4663273pgd.642.2024.02.19.10.24.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 10:24:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71733-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=geU7p5P0; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71733-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71733-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 34504286FFB for ; Mon, 19 Feb 2024 17:05:56 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6086F4879D; Mon, 19 Feb 2024 17:03:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="geU7p5P0" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C561445949; Mon, 19 Feb 2024 17:03:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362233; cv=none; b=ciJ7F9FGB2zt0V+x91LTm2q/Kxrcb2t3pgcQ8uO8f1bxnIRMPEYwHWtVfMTi7G6bx31wgzyDSP4U0PmkKprD3KkhErxGiDGimzXJYTqXvNIHqazWNOocox+KEfpC86Imc2YyAuj2+iauK7hVwySNyXbLFsdMNkTLoLDcY7OzbeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362233; c=relaxed/simple; bh=WXC5x/5xpsIn2kxjIiHl+pWHnAC7qY7YPJf9uH9AyEE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n/xM/UXhmLltQRNZ8ndmRdjlkXkUNieU8fJxoLot7PEeuxeygfZ0Rt2VsM0OwX79qnwWr9afN9Q7qlpWyyzSCNXYgxoMElG9L1/h6K1Ah3jd78sM++VVcxgN7M53KePiT2dqp1B8VSoRwmdVcVW5js6VQh0h1/mIKjzwyRzX64Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=geU7p5P0; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362232; x=1739898232; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WXC5x/5xpsIn2kxjIiHl+pWHnAC7qY7YPJf9uH9AyEE=; b=geU7p5P0zG7fRQOH5nxDPNckY5X5Sz0mU/ot44VerWOgR5rzxKzTCqYP LhlEU2/B1RKvFkYIhOCCgDfIchPuGjWOCcpm8d19Vr/WQxMZXu2o8jJwu ac6MSm4PaUoR8r1YYcGArZedj6j0f8aGdFtBkWwutVlzKwrpp+Tef4vFZ LmYPL/zEgoWVanGUyytQQiF1tPn//1br67I98NT2ID1BaH+dlGT4qvf3o TKhZWl9+uDKmebvNLfoAqpUe+qNHnxzA9hU1SWdVW/kSM+QwnFfgtTTB9 UCzRXcZyFJVaaBR5GSI/8mwggk+wnQdqNw7sW+f+2mUi59lart6dfrdDN g==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577442" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577442" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315370" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315370" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:46 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 7EB47FF3; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 7/9] auxdisplay: ht16k33: Drop struct ht16k33_seg Date: Mon, 19 Feb 2024 18:58:06 +0200 Message-ID: <20240219170337.2161754-8-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791352736360998756 X-GMAIL-MSGID: 1791352736360998756 The struct ht16k33_seg is repeating struct linedisp. Use the latter directly. Signed-off-by: Andy Shevchenko Reviewed-by: Geert Uytterhoeven --- drivers/auxdisplay/ht16k33.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c index 41a961342dc3..96acfb2b58cd 100644 --- a/drivers/auxdisplay/ht16k33.c +++ b/drivers/auxdisplay/ht16k33.c @@ -86,10 +86,6 @@ struct ht16k33_fbdev { uint8_t *cache; }; -struct ht16k33_seg { - struct linedisp linedisp; -}; - struct ht16k33_priv { struct i2c_client *client; struct delayed_work work; @@ -97,7 +93,7 @@ struct ht16k33_priv { struct ht16k33_keypad keypad; union { struct ht16k33_fbdev fbdev; - struct ht16k33_seg seg; + struct linedisp linedisp; }; enum display_type type; uint8_t blink; @@ -110,7 +106,7 @@ struct ht16k33_priv { container_of(p, struct ht16k33_priv, led) #define ht16k33_linedisp_to_priv(p) \ - container_of(p, struct ht16k33_priv, seg.linedisp) + container_of(p, struct ht16k33_priv, linedisp) static const struct fb_fix_screeninfo ht16k33_fb_fix = { .id = DRIVER_NAME, @@ -417,9 +413,8 @@ static void ht16k33_keypad_stop(struct input_dev *dev) static void ht16k33_seg7_update(struct work_struct *work) { struct ht16k33_priv *priv = ht16k33_work_to_priv(work); - struct ht16k33_seg *seg = &priv->seg; - struct linedisp_map *map = seg->linedisp.map; - char *s = seg->linedisp.buf; + struct linedisp_map *map = priv->linedisp.map; + char *s = priv->linedisp.buf; uint8_t buf[9]; buf[0] = map_to_seg7(&map->map.seg7, *s++); @@ -438,9 +433,8 @@ static void ht16k33_seg7_update(struct work_struct *work) static void ht16k33_seg14_update(struct work_struct *work) { struct ht16k33_priv *priv = ht16k33_work_to_priv(work); - struct ht16k33_seg *seg = &priv->seg; - struct linedisp_map *map = seg->linedisp.map; - char *s = seg->linedisp.buf; + struct linedisp_map *map = priv->linedisp.map; + char *s = priv->linedisp.buf; uint8_t buf[8]; put_unaligned_le16(map_to_seg14(&map->map.seg14, *s++), buf + 0); @@ -662,14 +656,14 @@ static int ht16k33_fbdev_probe(struct device *dev, struct ht16k33_priv *priv, static int ht16k33_seg_probe(struct device *dev, struct ht16k33_priv *priv, uint32_t brightness) { - struct ht16k33_seg *seg = &priv->seg; + struct linedisp *linedisp = &priv->linedisp; int err; err = ht16k33_brightness_set(priv, brightness); if (err) return err; - return linedisp_register(&seg->linedisp, dev, 4, &ht16k33_linedisp_ops); + return linedisp_register(linedisp, dev, 4, &ht16k33_linedisp_ops); } static int ht16k33_probe(struct i2c_client *client) @@ -756,7 +750,7 @@ static void ht16k33_remove(struct i2c_client *client) case DISP_QUAD_7SEG: case DISP_QUAD_14SEG: - linedisp_unregister(&priv->seg.linedisp); + linedisp_unregister(&priv->linedisp); break; default: From patchwork Mon Feb 19 16:58:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203220 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp1479830dyc; Mon, 19 Feb 2024 11:06:04 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCU6FH5DVYWj3G6AAA2baRGnlJSQjdvn2jcaTk9AD+ZwDQNPHthNOxbj9znWYno1uc7cMm+/NPzWUXE6vwyeaQR3/RMbfA== X-Google-Smtp-Source: AGHT+IH4oWKL1h+rb+wGOPVQzLTzVJNy5hb40q/hTPQIDrvHOG5pBwAB4ge//iWArxdoKC5cLvWT X-Received: by 2002:a05:620a:21dc:b0:785:a288:8c74 with SMTP id h28-20020a05620a21dc00b00785a2888c74mr14702199qka.49.1708369564037; Mon, 19 Feb 2024 11:06:04 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708369564; cv=pass; d=google.com; s=arc-20160816; b=NyP/k8rcsGz6J5F4WD7woiRisSIq/NYW/rKG7E0n8Skfzbh+OTUaB55YCHD+yLJxxe 58/ici09pjuNqOLf2V08MHatjkiqDA36yCeV1TSt1eEMcIM2wopyZR6h6OqYw0xaVczs fCXUS9hXnDWVW+GmP9XNYv3/ppYSLtyGNLOqj+o4dTwuNLFUOx0+1bffRB3CETywnxQc ZBVgbJ2KH0JbNWa6Cnyd49H0gaxcbaEFWqYWZ8mFaTKJzI7VHC0xKqb3C+7k91Ufe0DU Qk82CpHpxKQgpd9u+yLfnw958qKFg8OtG5KCVH7udAxkV69LH8kNxJxhYfuaF8R4q2ka sTag== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=CPegCaU1ZKhQ9MFVOvIF8SCPzcGIPmLO9eoku6Mj6yU=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=aHADzTxMDWhb1wsxiyc+uOfDWiLC2v9HiB0vCYdOYYMpFKQUn/X+y+gdGpjyi2HtWo C/fyjxtuWzHroBSQEgBF6WK3SGhsLFYiOOBm+puYaVR8WzsAK8IjDFiMvQK1EjHqp7qO DJsac09Cy4b4QYG5F11kDcdIeZCakr1cw1fvTMzjuvMuY+59bzY4C49+wlzxmFRirB3b 6W+0vuXqzBmjSIbYC/Jl6OsJXv/aPOiZ+VDrHTcbWQen94yWi0yihJWmQsFapyPNfnEJ WlnZTehGADcrvg+5+643/t6lXOQH2TsKXIv2KkEL2bEe5KDG3XV1OWji5mkjIVyPccJV VHCA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PepnHZIU; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71734-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71734-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id os39-20020a05620a812700b007874b46a740si6739241qkn.211.2024.02.19.11.06.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 11:06:04 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71734-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PepnHZIU; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71734-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71734-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 325D61C23DC5 for ; Mon, 19 Feb 2024 17:06:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 33DA1487B8; Mon, 19 Feb 2024 17:03:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="PepnHZIU" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9B0045C1C; Mon, 19 Feb 2024 17:03:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362234; cv=none; b=nWL2UEUUSnGOxQMsawwnW26SjSHp9A5IWIldP4f12chc9YHa++0hHyUfIuQ9vx5iO8/07Stoy4lNZU0F9529AdoVGVvdNBC4FSKkuTUkUDAegqYh0zwxP0qvTg78Ki02s4eKfCviGNse7QiDGUDibn97aYlKnAGQbTqTTEbdPMY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362234; c=relaxed/simple; bh=6cS5003Ea7vJky8UGZPonoKb3xlJWcOZDue5cut7S5o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fcSne+Julo800o+vlmTAgd9U4b7ELCNFPhFX3ds8JVLTzx3p92h8NH0g8LF4/kKicOCEaGhd7tSUsUN5TUn1AxzfBX5OkT+NGziPlGBTudA2WhhcyVvYo3mSCWw93U/0kKAgF90THCFcSWz87i3mwzLRPdb57sduraPhm+dxqms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=PepnHZIU; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362233; x=1739898233; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6cS5003Ea7vJky8UGZPonoKb3xlJWcOZDue5cut7S5o=; b=PepnHZIUZJ5Daw45Hcw1iZkn3Ki1ZlXcC2o3xo3dPTs/aBNZ4t5O1SJX 2KBg/OscV/zASVFcJdhsorCLaCbWA3E4tlKv/kbGx3abuyU/QS9TW/GDa VaCegbnSoY6JG5A2F4hCS03au4J7fJlBYAOnQGrt0MhjLf50/9h8CcNut lbo86YEoSEpNTh7vnyekuEvR2fBv0MgdxdLSUWWe2Qz5r4FnLVsvUEpm6 3DLls//6Go6xNgSy05XHZemblxz6qHxxqqOn1JFcGniDPBCAVJ33Z0aGN vqGDqOnBzqMjmFNDbXaOuLSx/7bpCapd0O4HQhFRmPoUpbLLqFy7xUlXE A==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577449" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577449" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315372" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315372" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:46 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 8C0F4103D; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 8/9] dt-bindings: auxdisplay: Add Maxim MAX6958/6959 Date: Mon, 19 Feb 2024 18:58:07 +0200 Message-ID: <20240219170337.2161754-9-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791355324058613671 X-GMAIL-MSGID: 1791355324058613671 Add initial device tree documentation for Maxim MAX6958/6959. As per reviewer's request mention the fact of absence reset and power enable pins, since the hardware is quite simple. Signed-off-by: Andy Shevchenko Reviewed-by: Krzysztof Kozlowski Reviewed-by: Geert Uytterhoeven --- .../bindings/auxdisplay/maxim,max6959.yaml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Documentation/devicetree/bindings/auxdisplay/maxim,max6959.yaml diff --git a/Documentation/devicetree/bindings/auxdisplay/maxim,max6959.yaml b/Documentation/devicetree/bindings/auxdisplay/maxim,max6959.yaml new file mode 100644 index 000000000000..6c78bb185348 --- /dev/null +++ b/Documentation/devicetree/bindings/auxdisplay/maxim,max6959.yaml @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/auxdisplay/maxim,max6959.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: MAX6958/6959 7-segment LED display controller + +maintainers: + - Andy Shevchenko + +description: + The Maxim MAX6958/6959 7-segment LED display controller provides + an I2C interface to up to four 7-segment LED digits. The MAX6959, + in comparison to MAX6958, adds input support. Type of the chip can + be autodetected via specific register read, and hence the features + may be enabled in the driver at run-time, in case they are requested + via Device Tree. A given hardware is simple and does not provide + any additional pins, such as reset or enable. + +properties: + compatible: + const: maxim,max6959 + + reg: + maxItems: 1 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells = <1>; + #size-cells = <0>; + + display-controller@38 { + compatible = "maxim,max6959"; + reg = <0x38>; + }; + }; From patchwork Mon Feb 19 16:58:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 203206 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp1461181dyc; Mon, 19 Feb 2024 10:25:17 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUQWnxL6tyNwEU3IeXLwGzJwBhmv9mzkZfWVxS7IJ/KBRCWWXmZXVYKXvyXgfs8uwFV7LTM4Kjsu5I+/yzqZXfHPzkMgQ== X-Google-Smtp-Source: AGHT+IFMM/hAxj/wHB0snb6iadmTAKa7q0pZWxUUci8E9hjA2cYGeJExy9LjfWxRZAeCIaq1iHDm X-Received: by 2002:a25:ac95:0:b0:dcc:9e88:b1b with SMTP id x21-20020a25ac95000000b00dcc9e880b1bmr11640876ybi.37.1708367117043; Mon, 19 Feb 2024 10:25:17 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708367117; cv=pass; d=google.com; s=arc-20160816; b=Tj04rvVzEXgQaJSz233Z1TZGt+0TRmMfYzieG35aWUHYQ9PXgJBnuzW+q6LtqQ4HaC iIn2vFtvAk4zTSEvREJYEhFNCEfgf8VG34KhjOXRZmqbdl55g1Ftm+WxMAhjwK1CwvD6 ASJQAPjwqJALZDfcsGEsuF8vqG4L7PRS5yJkAA0YiZ85r8yX4i7ao98KAiZdF+1sj4Ou fXylGPrpoc75mccCeMocOhTlsU357LYxtneMTMMZveLJNtowOni6kf7lVklxsAt/NDyI PNe4jEHLwljDytvMtvzOCI07Un6Dt6TgFAtWcRJlu8g6W3gnG4FsuNZ1QU2oFoqNf54J Cu/A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=wju3fCn3IizvIcJzVktYU/YKOUO4qi+UZcs0U9X8GyI=; fh=dqy4saYl98vaBioBitW8P99YvD9vNvqzqRubV0LdUlg=; b=SdSPztjoOyTsXQNfULnKijxLFJx5XYpuiBcrpAyKcR1qtcHP6zJtCURpiaH45OGK6v 42AaQOtnq/lCcHCysxdj94G3ALSSA3+WeJbwhrvjpPvA2e+Cbk+KsxxU+Ijmk1eCB/TU uk+hDyOdmJm6FebsI3Cw5Q/XaJRr1rEdbUay5/NWCGQqu4ZZ1aQMTplvQvq+TCNO06D3 URjlUXWGpJIIIsHUaUBJEwqAQU4T6MFgET3yThyDvb8B34IylWhIP2QrmKU40YiBnVnR cCLxVc32nXxz++aJAFSPgqe4cf8aGPnl2v8zgmtsdeg9x5zslaur4wgTfPH+UV3R21IV L84g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=a+fQZK10; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71730-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71730-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id ou40-20020a05620a622800b0078724ca7e88si6949216qkn.125.2024.02.19.10.25.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 10:25:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71730-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=a+fQZK10; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-71730-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71730-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 403941C23FC0 for ; Mon, 19 Feb 2024 17:05:42 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A0D1E482F1; Mon, 19 Feb 2024 17:03:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="a+fQZK10" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0765544C6E; Mon, 19 Feb 2024 17:03:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362231; cv=none; b=HfqdSTxN4/FpP630lmyLNQ8lQjDvrdypQodoTzXovRVXc0HphCtKP1QBF4RS1ixN92I0rvPP4uUCivRpdHLK8FsZjWDpsAKIzdHjEmLQZK35atxlKVS4cL1zfxHkcsd/JHY9njNxhPncdYCKqH57asFUb/jY1jR78thd1+s/ehc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708362231; c=relaxed/simple; bh=XdwgCH4GhJq64BzVy3/gUxYOZMQMDnBvonE+oyY5QFA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YCdHpO36Lao23MzhFYctWA2hQh55jpPi417entZ3uKazYGn+IX7LOWF6NKHQpbzw2nlF742xnJt61vJppZVbHcCtjvnCGOyjjdvQLzZDBBlK3GLKf5Pqf+uE8/1l3fEGnig6l2PPQ4wKg1PzEJhu0+2cJnMK6htmtOEdY+3vqQY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=a+fQZK10; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708362230; x=1739898230; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=XdwgCH4GhJq64BzVy3/gUxYOZMQMDnBvonE+oyY5QFA=; b=a+fQZK10x3uD8kcrI+5RoIJ6vqMWSAKTtrYNgH37cubZMVwDuZKSvOsu 3KeWZFmmRkPotP1j6bC0n/M1i+TTXMypMq8Kdx3utbWSErtBCkJzvRtVM +NGmSezVgmk8hyCPdMWrxcKm0jbmdNdW5EjjRbUMtOTG83Bc9mj4g+xJ4 Z8V8mjKSxFkr6qphxAbC4pSOx/dtUgyUDyLZYwPp/QodBudqYvtoV1nhA Cy5KTHg0MxW1/Lk8vLgrzm8nR2N2KFP2YEqKZsLwxTeeIgyybP+b2vqRz 5tbwaov5P3OiTt4bm4bNTbdi815vFzCYn2HfJe9olrAXg/MZV8Mw4Cuw8 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="2577427" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="2577427" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2024 09:03:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10989"; a="936315371" X-IronPort-AV: E=Sophos;i="6.06,170,1705392000"; d="scan'208";a="936315371" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 19 Feb 2024 09:03:46 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 947E71063; Mon, 19 Feb 2024 19:03:41 +0200 (EET) From: Andy Shevchenko To: Krzysztof Kozlowski , Andy Shevchenko , Geert Uytterhoeven , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Robin van der Gracht , Paul Burton Subject: [PATCH v3 9/9] auxdisplay: Add driver for MAX695x 7-segment LED controllers Date: Mon, 19 Feb 2024 18:58:08 +0200 Message-ID: <20240219170337.2161754-10-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> References: <20240219170337.2161754-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791352758291143328 X-GMAIL-MSGID: 1791352758291143328 Add initial driver for the MAX6958 and MAX6959 7-segment LED controllers. Signed-off-by: Andy Shevchenko Reviewed-by: Geert Uytterhoeven --- drivers/auxdisplay/Kconfig | 14 +++ drivers/auxdisplay/Makefile | 1 + drivers/auxdisplay/max6959.c | 194 +++++++++++++++++++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 drivers/auxdisplay/max6959.c diff --git a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kconfig index 109ac253d160..bc295ede3c2c 100644 --- a/drivers/auxdisplay/Kconfig +++ b/drivers/auxdisplay/Kconfig @@ -59,6 +59,20 @@ config LCD2S is a simple single color character display. You have to connect it to an I2C bus. +config MAX6959 + tristate "Maxim MAX6958/6959 7-segment LED controller" + depends on I2C + select REGMAP_I2C + select LINEDISP + help + If you say yes here you get support for the following Maxim chips + (I2C 7-segment LED display controller): + - MAX6958 + - MAX6959 (input support) + + This driver can also be built as a module. If so, the module + will be called max6959. + menuconfig PARPORT_PANEL tristate "Parallel port LCD/Keypad Panel support" depends on PARPORT diff --git a/drivers/auxdisplay/Makefile b/drivers/auxdisplay/Makefile index 9197ea34e2d6..9718aedf6ee2 100644 --- a/drivers/auxdisplay/Makefile +++ b/drivers/auxdisplay/Makefile @@ -15,5 +15,6 @@ obj-$(CONFIG_CFAG12864B) += cfag12864b.o cfag12864bfb.o obj-$(CONFIG_LINEDISP) += line-display.o obj-$(CONFIG_IMG_ASCII_LCD) += img-ascii-lcd.o obj-$(CONFIG_HT16K33) += ht16k33.o +obj-$(CONFIG_MAX6959) += max6959.o obj-$(CONFIG_ARM_CHARLCD) += arm-charlcd.o diff --git a/drivers/auxdisplay/max6959.c b/drivers/auxdisplay/max6959.c new file mode 100644 index 000000000000..5519c014bd29 --- /dev/null +++ b/drivers/auxdisplay/max6959.c @@ -0,0 +1,194 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MAX6958/6959 7-segment LED display controller + * Datasheet: + * https://www.analog.com/media/en/technical-documentation/data-sheets/MAX6958-MAX6959.pdf + * + * Copyright (c) 2024, Intel Corporation. + * Author: Andy Shevchenko + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "line-display.h" + +/* Registers */ +#define REG_DECODE_MODE 0x01 +#define REG_INTENSITY 0x02 +#define REG_SCAN_LIMIT 0x03 +#define REG_CONFIGURATION 0x04 +#define REG_CONFIGURATION_S_BIT BIT(0) + +#define REG_DIGIT(x) (0x20 + (x)) +#define REG_DIGIT0 0x20 +#define REG_DIGIT1 0x21 +#define REG_DIGIT2 0x22 +#define REG_DIGIT3 0x23 + +#define REG_SEGMENTS 0x24 +#define REG_MAX REG_SEGMENTS + +struct max6959_priv { + struct linedisp linedisp; + struct delayed_work work; + struct regmap *regmap; +}; + +static void max6959_disp_update(struct work_struct *work) +{ + struct max6959_priv *priv = container_of(work, struct max6959_priv, work.work); + struct linedisp *linedisp = &priv->linedisp; + struct linedisp_map *map = linedisp->map; + char *s = linedisp->buf; + u8 buf[4]; + + /* Map segments according to datasheet */ + buf[0] = bitrev8(map_to_seg7(&map->map.seg7, *s++)) >> 1; + buf[1] = bitrev8(map_to_seg7(&map->map.seg7, *s++)) >> 1; + buf[2] = bitrev8(map_to_seg7(&map->map.seg7, *s++)) >> 1; + buf[3] = bitrev8(map_to_seg7(&map->map.seg7, *s++)) >> 1; + + regmap_bulk_write(priv->regmap, REG_DIGIT(0), buf, ARRAY_SIZE(buf)); +} + +static int max6959_linedisp_get_map_type(struct linedisp *linedisp) +{ + struct max6959_priv *priv = container_of(linedisp, struct max6959_priv, linedisp); + + INIT_DELAYED_WORK(&priv->work, max6959_disp_update); + return LINEDISP_MAP_SEG7; +} + +static void max6959_linedisp_update(struct linedisp *linedisp) +{ + struct max6959_priv *priv = container_of(linedisp, struct max6959_priv, linedisp); + + schedule_delayed_work(&priv->work, 0); +} + +static const struct linedisp_ops max6959_linedisp_ops = { + .get_map_type = max6959_linedisp_get_map_type, + .update = max6959_linedisp_update, +}; + +static int max6959_enable(struct max6959_priv *priv, bool enable) +{ + u8 mask = REG_CONFIGURATION_S_BIT; + u8 value = enable ? mask : 0; + + return regmap_update_bits(priv->regmap, REG_CONFIGURATION, mask, value); +} + +static void max6959_power_off(void *priv) +{ + max6959_enable(priv, false); +} + +static int max6959_power_on(struct max6959_priv *priv) +{ + struct device *dev = regmap_get_device(priv->regmap); + int ret; + + ret = max6959_enable(priv, true); + if (ret) + return ret; + + return devm_add_action_or_reset(dev, max6959_power_off, priv); +} + +static const struct regmap_config max6959_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + + .max_register = REG_MAX, + .cache_type = REGCACHE_MAPLE, +}; + +static int max6959_i2c_probe(struct i2c_client *client) +{ + struct device *dev = &client->dev; + struct max6959_priv *priv; + int ret; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->regmap = devm_regmap_init_i2c(client, &max6959_regmap_config); + if (IS_ERR(priv->regmap)) + return PTR_ERR(priv->regmap); + + ret = max6959_power_on(priv); + if (ret) + return ret; + + ret = linedisp_register(&priv->linedisp, dev, 4, &max6959_linedisp_ops); + if (ret) + return ret; + + i2c_set_clientdata(client, priv); + + return 0; +} + +static void max6959_i2c_remove(struct i2c_client *client) +{ + struct max6959_priv *priv = i2c_get_clientdata(client); + + cancel_delayed_work_sync(&priv->work); + linedisp_unregister(&priv->linedisp); +} + +static int max6959_suspend(struct device *dev) +{ + return max6959_enable(dev_get_drvdata(dev), false); +} + +static int max6959_resume(struct device *dev) +{ + return max6959_enable(dev_get_drvdata(dev), true); +} + +static DEFINE_SIMPLE_DEV_PM_OPS(max6959_pm_ops, max6959_suspend, max6959_resume); + +static const struct i2c_device_id max6959_i2c_id[] = { + { "max6959" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, max6959_i2c_id); + +static const struct of_device_id max6959_of_table[] = { + { .compatible = "maxim,max6959" }, + { } +}; +MODULE_DEVICE_TABLE(of, max6959_of_table); + +static struct i2c_driver max6959_i2c_driver = { + .driver = { + .name = "max6959", + .pm = pm_sleep_ptr(&max6959_pm_ops), + .of_match_table = max6959_of_table, + }, + .probe = max6959_i2c_probe, + .remove = max6959_i2c_remove, + .id_table = max6959_i2c_id, +}; +module_i2c_driver(max6959_i2c_driver); + +MODULE_DESCRIPTION("MAX6958/6959 7-segment LED controller"); +MODULE_AUTHOR("Andy Shevchenko "); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS(LINEDISP);