From nobody Sat Apr 18 07:43:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60353C433EF for ; Fri, 15 Jul 2022 14:24:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230492AbiGOOYq (ORCPT ); Fri, 15 Jul 2022 10:24:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229692AbiGOOYn (ORCPT ); Fri, 15 Jul 2022 10:24:43 -0400 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EDE973B965 for ; Fri, 15 Jul 2022 07:24:41 -0700 (PDT) Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id 962791FB79; Fri, 15 Jul 2022 14:24:40 +0000 (UTC) Received: from adalid.arch.suse.de (adalid.arch.suse.de [10.161.8.13]) by relay2.suse.de (Postfix) with ESMTP id 7FBF92C141; Fri, 15 Jul 2022 14:24:40 +0000 (UTC) From: Thomas Bogendoerfer To: Arnd Bergmann , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Subject: [PATCH] char: remove VR41XX related char driver Date: Fri, 15 Jul 2022 16:24:36 +0200 Message-Id: <20220715142437.137411-1-tsbogend@alpha.franken.de> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Commit d3164e2f3b0a ("MIPS: Remove VR41xx support") removed support for MIPS VR41xx platform, so remove exclusive drivers for this platform, too. Signed-off-by: Thomas Bogendoerfer --- drivers/char/Kconfig | 5 - drivers/char/Makefile | 1 - drivers/char/tb0219.c | 358 ------------------------------------------ 3 files changed, 364 deletions(-) delete mode 100644 drivers/char/tb0219.c diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index 30192e123e5f..0f378d29dab0 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -247,11 +247,6 @@ config SONYPI To compile this driver as a module, choose M here: the module will be called sonypi. =20 -config GPIO_TB0219 - tristate "TANBAC TB0219 GPIO support" - depends on TANBAC_TB022X - select GPIO_VR41XX - source "drivers/char/pcmcia/Kconfig" =20 config MWAVE diff --git a/drivers/char/Makefile b/drivers/char/Makefile index 264eb398fdd4..1b35d1724565 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile @@ -31,7 +31,6 @@ obj-$(CONFIG_NWFLASH) +=3D nwflash.o obj-$(CONFIG_SCx200_GPIO) +=3D scx200_gpio.o obj-$(CONFIG_PC8736x_GPIO) +=3D pc8736x_gpio.o obj-$(CONFIG_NSC_GPIO) +=3D nsc_gpio.o -obj-$(CONFIG_GPIO_TB0219) +=3D tb0219.o obj-$(CONFIG_TELCLOCK) +=3D tlclk.o =20 obj-$(CONFIG_MWAVE) +=3D mwave/ diff --git a/drivers/char/tb0219.c b/drivers/char/tb0219.c deleted file mode 100644 index 13c20b6594c3..000000000000 --- a/drivers/char/tb0219.c +++ /dev/null @@ -1,358 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * Driver for TANBAC TB0219 base board. - * - * Copyright (C) 2005 Yoichi Yuasa - */ -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -MODULE_AUTHOR("Yoichi Yuasa "); -MODULE_DESCRIPTION("TANBAC TB0219 base board driver"); -MODULE_LICENSE("GPL"); - -static int major; /* default is dynamic major device number */ -module_param(major, int, 0); -MODULE_PARM_DESC(major, "Major device number"); - -static void (*old_machine_restart)(char *command); -static void __iomem *tb0219_base; -static DEFINE_SPINLOCK(tb0219_lock); - -#define tb0219_read(offset) readw(tb0219_base + (offset)) -#define tb0219_write(offset, value) writew((value), tb0219_base + (offset)) - -#define TB0219_START 0x0a000000UL -#define TB0219_SIZE 0x20UL - -#define TB0219_LED 0x00 -#define TB0219_GPIO_INPUT 0x02 -#define TB0219_GPIO_OUTPUT 0x04 -#define TB0219_DIP_SWITCH 0x06 -#define TB0219_MISC 0x08 -#define TB0219_RESET 0x0e -#define TB0219_PCI_SLOT1_IRQ_STATUS 0x10 -#define TB0219_PCI_SLOT2_IRQ_STATUS 0x12 -#define TB0219_PCI_SLOT3_IRQ_STATUS 0x14 - -typedef enum { - TYPE_LED, - TYPE_GPIO_OUTPUT, -} tb0219_type_t; - -/* - * Minor device number - * 0 =3D 7 segment LED - * - * 16 =3D GPIO IN 0 - * 17 =3D GPIO IN 1 - * 18 =3D GPIO IN 2 - * 19 =3D GPIO IN 3 - * 20 =3D GPIO IN 4 - * 21 =3D GPIO IN 5 - * 22 =3D GPIO IN 6 - * 23 =3D GPIO IN 7 - * - * 32 =3D GPIO OUT 0 - * 33 =3D GPIO OUT 1 - * 34 =3D GPIO OUT 2 - * 35 =3D GPIO OUT 3 - * 36 =3D GPIO OUT 4 - * 37 =3D GPIO OUT 5 - * 38 =3D GPIO OUT 6 - * 39 =3D GPIO OUT 7 - * - * 48 =3D DIP switch 1 - * 49 =3D DIP switch 2 - * 50 =3D DIP switch 3 - * 51 =3D DIP switch 4 - * 52 =3D DIP switch 5 - * 53 =3D DIP switch 6 - * 54 =3D DIP switch 7 - * 55 =3D DIP switch 8 - */ - -static inline char get_led(void) -{ - return (char)tb0219_read(TB0219_LED); -} - -static inline char get_gpio_input_pin(unsigned int pin) -{ - uint16_t values; - - values =3D tb0219_read(TB0219_GPIO_INPUT); - if (values & (1 << pin)) - return '1'; - - return '0'; -} - -static inline char get_gpio_output_pin(unsigned int pin) -{ - uint16_t values; - - values =3D tb0219_read(TB0219_GPIO_OUTPUT); - if (values & (1 << pin)) - return '1'; - - return '0'; -} - -static inline char get_dip_switch(unsigned int pin) -{ - uint16_t values; - - values =3D tb0219_read(TB0219_DIP_SWITCH); - if (values & (1 << pin)) - return '1'; - - return '0'; -} - -static inline int set_led(char command) -{ - tb0219_write(TB0219_LED, command); - - return 0; -} - -static inline int set_gpio_output_pin(unsigned int pin, char command) -{ - unsigned long flags; - uint16_t value; - - if (command !=3D '0' && command !=3D '1') - return -EINVAL; - - spin_lock_irqsave(&tb0219_lock, flags); - value =3D tb0219_read(TB0219_GPIO_OUTPUT); - if (command =3D=3D '0') - value &=3D ~(1 << pin); - else - value |=3D 1 << pin; - tb0219_write(TB0219_GPIO_OUTPUT, value); - spin_unlock_irqrestore(&tb0219_lock, flags); - - return 0; - -} - -static ssize_t tanbac_tb0219_read(struct file *file, char __user *buf, siz= e_t len, - loff_t *ppos) -{ - unsigned int minor; - char value; - - minor =3D iminor(file_inode(file)); - switch (minor) { - case 0: - value =3D get_led(); - break; - case 16 ... 23: - value =3D get_gpio_input_pin(minor - 16); - break; - case 32 ... 39: - value =3D get_gpio_output_pin(minor - 32); - break; - case 48 ... 55: - value =3D get_dip_switch(minor - 48); - break; - default: - return -EBADF; - } - - if (len <=3D 0) - return -EFAULT; - - if (put_user(value, buf)) - return -EFAULT; - - return 1; -} - -static ssize_t tanbac_tb0219_write(struct file *file, const char __user *d= ata, - size_t len, loff_t *ppos) -{ - unsigned int minor; - tb0219_type_t type; - size_t i; - int retval =3D 0; - char c; - - minor =3D iminor(file_inode(file)); - switch (minor) { - case 0: - type =3D TYPE_LED; - break; - case 32 ... 39: - type =3D TYPE_GPIO_OUTPUT; - break; - default: - return -EBADF; - } - - for (i =3D 0; i < len; i++) { - if (get_user(c, data + i)) - return -EFAULT; - - switch (type) { - case TYPE_LED: - retval =3D set_led(c); - break; - case TYPE_GPIO_OUTPUT: - retval =3D set_gpio_output_pin(minor - 32, c); - break; - } - - if (retval < 0) - break; - } - - return i; -} - -static int tanbac_tb0219_open(struct inode *inode, struct file *file) -{ - unsigned int minor; - - minor =3D iminor(inode); - switch (minor) { - case 0: - case 16 ... 23: - case 32 ... 39: - case 48 ... 55: - return stream_open(inode, file); - default: - break; - } - - return -EBADF; -} - -static int tanbac_tb0219_release(struct inode *inode, struct file *file) -{ - return 0; -} - -static const struct file_operations tb0219_fops =3D { - .owner =3D THIS_MODULE, - .read =3D tanbac_tb0219_read, - .write =3D tanbac_tb0219_write, - .open =3D tanbac_tb0219_open, - .release =3D tanbac_tb0219_release, -}; - -static void tb0219_restart(char *command) -{ - tb0219_write(TB0219_RESET, 0); -} - -static void tb0219_pci_irq_init(void) -{ - /* PCI Slot 1 */ - vr41xx_set_irq_trigger(TB0219_PCI_SLOT1_PIN, IRQ_TRIGGER_LEVEL, IRQ_SIGNA= L_THROUGH); - vr41xx_set_irq_level(TB0219_PCI_SLOT1_PIN, IRQ_LEVEL_LOW); - - /* PCI Slot 2 */ - vr41xx_set_irq_trigger(TB0219_PCI_SLOT2_PIN, IRQ_TRIGGER_LEVEL, IRQ_SIGNA= L_THROUGH); - vr41xx_set_irq_level(TB0219_PCI_SLOT2_PIN, IRQ_LEVEL_LOW); - - /* PCI Slot 3 */ - vr41xx_set_irq_trigger(TB0219_PCI_SLOT3_PIN, IRQ_TRIGGER_LEVEL, IRQ_SIGNA= L_THROUGH); - vr41xx_set_irq_level(TB0219_PCI_SLOT3_PIN, IRQ_LEVEL_LOW); -} - -static int tb0219_probe(struct platform_device *dev) -{ - int retval; - - if (request_mem_region(TB0219_START, TB0219_SIZE, "TB0219") =3D=3D NULL) - return -EBUSY; - - tb0219_base =3D ioremap(TB0219_START, TB0219_SIZE); - if (tb0219_base =3D=3D NULL) { - release_mem_region(TB0219_START, TB0219_SIZE); - return -ENOMEM; - } - - retval =3D register_chrdev(major, "TB0219", &tb0219_fops); - if (retval < 0) { - iounmap(tb0219_base); - tb0219_base =3D NULL; - release_mem_region(TB0219_START, TB0219_SIZE); - return retval; - } - - old_machine_restart =3D _machine_restart; - _machine_restart =3D tb0219_restart; - - tb0219_pci_irq_init(); - - if (major =3D=3D 0) { - major =3D retval; - printk(KERN_INFO "TB0219: major number %d\n", major); - } - - return 0; -} - -static int tb0219_remove(struct platform_device *dev) -{ - _machine_restart =3D old_machine_restart; - - iounmap(tb0219_base); - tb0219_base =3D NULL; - - release_mem_region(TB0219_START, TB0219_SIZE); - - return 0; -} - -static struct platform_device *tb0219_platform_device; - -static struct platform_driver tb0219_device_driver =3D { - .probe =3D tb0219_probe, - .remove =3D tb0219_remove, - .driver =3D { - .name =3D "TB0219", - }, -}; - -static int __init tanbac_tb0219_init(void) -{ - int retval; - - tb0219_platform_device =3D platform_device_alloc("TB0219", -1); - if (!tb0219_platform_device) - return -ENOMEM; - - retval =3D platform_device_add(tb0219_platform_device); - if (retval < 0) { - platform_device_put(tb0219_platform_device); - return retval; - } - - retval =3D platform_driver_register(&tb0219_device_driver); - if (retval < 0) - platform_device_unregister(tb0219_platform_device); - - return retval; -} - -static void __exit tanbac_tb0219_exit(void) -{ - platform_driver_unregister(&tb0219_device_driver); - platform_device_unregister(tb0219_platform_device); -} - -module_init(tanbac_tb0219_init); -module_exit(tanbac_tb0219_exit); --=20 2.29.2