^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * LASI Device Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * (c) Copyright 1999 Red Hat Software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Portions (c) Copyright 1999 The Puffin Group Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Portions (c) Copyright 1999 Hewlett-Packard
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * by Alan Cox <alan@redhat.com> and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * Alex deVries <alex@onefishtwo.ca>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/interrupt.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/slab.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/pm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include <asm/io.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #include <asm/hardware.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #include <asm/led.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #include "gsc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define LASI_VER 0xC008 /* LASI Version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define LASI_IO_CONF 0x7FFFE /* LASI primary configuration register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define LASI_IO_CONF2 0x7FFFF /* LASI secondary configuration register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) static void lasi_choose_irq(struct parisc_device *dev, void *ctrl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) int irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) switch (dev->id.sversion) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) case 0x74: irq = 7; break; /* Centronics */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) case 0x7B: irq = 13; break; /* Audio */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) case 0x81: irq = 14; break; /* Lasi itself */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) case 0x82: irq = 9; break; /* SCSI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) case 0x83: irq = 20; break; /* Floppy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) case 0x84: irq = 26; break; /* PS/2 Keyboard */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) case 0x87: irq = 18; break; /* ISDN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) case 0x8A: irq = 8; break; /* LAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) case 0x8C: irq = 5; break; /* RS232 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) case 0x8D: irq = (dev->hw_path == 13) ? 16 : 17; break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) /* Telephone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) default: return; /* unknown */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) gsc_asic_assign_irq(ctrl, irq, &dev->irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) static void __init
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) lasi_init_irq(struct gsc_asic *this_lasi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) unsigned long lasi_base = this_lasi->hpa;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) /* Stop LASI barking for a bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) gsc_writel(0x00000000, lasi_base+OFFSET_IMR);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) /* clear pending interrupts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) gsc_readl(lasi_base+OFFSET_IRR);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) /* We're not really convinced we want to reset the onboard
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) * devices. Firmware does it for us...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) /* Resets */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) /* gsc_writel(0xFFFFFFFF, lasi_base+0x2000);*/ /* Parallel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) if(pdc_add_valid(lasi_base+0x4004) == PDC_OK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) gsc_writel(0xFFFFFFFF, lasi_base+0x4004); /* Audio */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) /* gsc_writel(0xFFFFFFFF, lasi_base+0x5000);*/ /* Serial */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) /* gsc_writel(0xFFFFFFFF, lasi_base+0x6000);*/ /* SCSI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) gsc_writel(0xFFFFFFFF, lasi_base+0x7000); /* LAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) gsc_writel(0xFFFFFFFF, lasi_base+0x8000); /* Keyboard */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) gsc_writel(0xFFFFFFFF, lasi_base+0xA000); /* FDC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) /* Ok we hit it on the head with a hammer, our Dog is now
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) ** comatose and muzzled. Devices will now unmask LASI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) ** interrupts as they are registered as irq's in the LASI range.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) /* XXX: I thought it was `awks that got `it on the `ead with an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) * `ammer. -- willy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) ** lasi_led_init()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) **
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) ** lasi_led_init() initializes the LED controller on the LASI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) **
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) ** Since Mirage and Electra machines use a different LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) ** address register, we need to check for these machines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) ** explicitly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #ifndef CONFIG_CHASSIS_LCD_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define lasi_led_init(x) /* nothing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) static void __init lasi_led_init(unsigned long lasi_hpa)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) unsigned long datareg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) switch (CPU_HVERSION) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) /* Gecko machines have only one single LED, which can be permanently
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) turned on by writing a zero into the power control register. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) case 0x600: /* Gecko (712/60) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) case 0x601: /* Gecko (712/80) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) case 0x602: /* Gecko (712/100) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) case 0x603: /* Anole 64 (743/64) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) case 0x604: /* Anole 100 (743/100) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) case 0x605: /* Gecko (712/120) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) datareg = lasi_hpa + 0x0000C000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) gsc_writeb(0, datareg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) return; /* no need to register the LED interrupt-function */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) /* Mirage and Electra machines need special offsets */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) case 0x60A: /* Mirage Jr (715/64) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) case 0x60B: /* Mirage 100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) case 0x60C: /* Mirage 100+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) case 0x60D: /* Electra 100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) case 0x60E: /* Electra 120 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) datareg = lasi_hpa - 0x00020000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) datareg = lasi_hpa + 0x0000C000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) register_led_driver(DISPLAY_MODEL_LASI, LED_CMD_REG_NONE, datareg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) * lasi_power_off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) * Function for lasi to turn off the power. This is accomplished by setting a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) * 1 to PWR_ON_L in the Power Control Register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) static unsigned long lasi_power_off_hpa __read_mostly;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) static void lasi_power_off(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) unsigned long datareg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) /* calculate addr of the Power Control Register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) datareg = lasi_power_off_hpa + 0x0000C000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) /* Power down the machine */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) gsc_writel(0x02, datareg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) static int __init lasi_init_chip(struct parisc_device *dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) extern void (*chassis_power_off)(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) struct gsc_asic *lasi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) struct gsc_irq gsc_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) lasi = kzalloc(sizeof(*lasi), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) if (!lasi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) lasi->name = "Lasi";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) lasi->hpa = dev->hpa.start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* Check the 4-bit (yes, only 4) version register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) lasi->version = gsc_readl(lasi->hpa + LASI_VER) & 0xf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) printk(KERN_INFO "%s version %d at 0x%lx found.\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) lasi->name, lasi->version, lasi->hpa);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) /* initialize the chassis LEDs really early */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) lasi_led_init(lasi->hpa);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) /* Stop LASI barking for a bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) lasi_init_irq(lasi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /* the IRQ lasi should use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) dev->irq = gsc_alloc_irq(&gsc_irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) if (dev->irq < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) printk(KERN_ERR "%s(): cannot get GSC irq\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) __func__);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) kfree(lasi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) return -EBUSY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) lasi->eim = ((u32) gsc_irq.txn_addr) | gsc_irq.txn_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) ret = request_irq(gsc_irq.irq, gsc_asic_intr, 0, "lasi", lasi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) if (ret < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) kfree(lasi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) /* enable IRQ's for devices below LASI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) gsc_writel(lasi->eim, lasi->hpa + OFFSET_IAR);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) /* Done init'ing, register this driver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) ret = gsc_common_setup(dev, lasi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) if (ret) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) kfree(lasi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) gsc_fixup_irqs(dev, lasi, lasi_choose_irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) /* initialize the power off function */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) /* FIXME: Record the LASI HPA for the power off function. This should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) * ensure that only the first LASI (the one controlling the power off)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) * should set the HPA here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) lasi_power_off_hpa = lasi->hpa;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) chassis_power_off = lasi_power_off;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) static struct parisc_device_id lasi_tbl[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) { HPHW_BA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00081 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) { 0, }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) struct parisc_driver lasi_driver __refdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) .name = "lasi",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) .id_table = lasi_tbl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) .probe = lasi_init_chip,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) };