[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241114131114.602234-8-mpe@ellerman.id.au>
Date: Fri, 15 Nov 2024 00:11:11 +1100
From: Michael Ellerman <mpe@...erman.id.au>
To: <linuxppc-dev@...ts.ozlabs.org>
Cc: <linux-kernel@...r.kernel.org>,
<geert@...ux-m68k.org>,
<arnd@...db.de>
Subject: [RFC PATCH 08/10] macintosh: Remove ADB_MACIO
The macio-adb driver depends on PPC_CHRP, which has been removed, remove
the driver also.
Signed-off-by: Michael Ellerman <mpe@...erman.id.au>
---
drivers/macintosh/Kconfig | 9 --
drivers/macintosh/Makefile | 1 -
drivers/macintosh/adb.c | 4 -
drivers/macintosh/macio-adb.c | 288 ----------------------------------
4 files changed, 302 deletions(-)
delete mode 100644 drivers/macintosh/macio-adb.c
diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
index fb38f684444f..aebe7ca50e59 100644
--- a/drivers/macintosh/Kconfig
+++ b/drivers/macintosh/Kconfig
@@ -135,15 +135,6 @@ config PMAC_BACKLIGHT_LEGACY
programs which use this old interface. New and updated programs
should use the backlight classes in sysfs.
-config ADB_MACIO
- bool "Include MacIO (CHRP) ADB driver"
- depends on ADB && PPC_CHRP && !PPC_PMAC64
- help
- Say Y here to include direct support for the ADB controller in the
- Hydra chip used on PowerPC Macintoshes of the CHRP type. (The Hydra
- also includes a MESH II SCSI controller, DBDMA controller, VIA chip,
- OpenPIC controller and two RS422/Geoports.)
-
config INPUT_ADBHID
bool "Support for ADB input devices (keyboard, mice, ...)"
depends on ADB && INPUT=y
diff --git a/drivers/macintosh/Makefile b/drivers/macintosh/Makefile
index 712edcb3e0b0..efecf2c20af3 100644
--- a/drivers/macintosh/Makefile
+++ b/drivers/macintosh/Makefile
@@ -23,7 +23,6 @@ obj-$(CONFIG_PMAC_SMU) += smu.o
obj-$(CONFIG_ADB) += adb.o
obj-$(CONFIG_ADB_MACII) += via-macii.o
obj-$(CONFIG_ADB_IOP) += adb-iop.o
-obj-$(CONFIG_ADB_MACIO) += macio-adb.o
obj-$(CONFIG_THERM_WINDTUNNEL) += therm_windtunnel.o
obj-$(CONFIG_THERM_ADT746X) += therm_adt746x.o
diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
index 88adee42ba82..f1186ce04167 100644
--- a/drivers/macintosh/adb.c
+++ b/drivers/macintosh/adb.c
@@ -52,7 +52,6 @@ extern struct adb_driver via_macii_driver;
extern struct adb_driver via_cuda_driver;
extern struct adb_driver adb_iop_driver;
extern struct adb_driver via_pmu_driver;
-extern struct adb_driver macio_adb_driver;
static DEFINE_MUTEX(adb_mutex);
static struct adb_driver *adb_driver_list[] = {
@@ -67,9 +66,6 @@ static struct adb_driver *adb_driver_list[] = {
#endif
#ifdef CONFIG_ADB_PMU
&via_pmu_driver,
-#endif
-#ifdef CONFIG_ADB_MACIO
- &macio_adb_driver,
#endif
NULL
};
diff --git a/drivers/macintosh/macio-adb.c b/drivers/macintosh/macio-adb.c
deleted file mode 100644
index 19c63959ebed..000000000000
--- a/drivers/macintosh/macio-adb.c
+++ /dev/null
@@ -1,288 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Driver for the ADB controller in the Mac I/O (Hydra) chip.
- */
-#include <linux/types.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <linux/delay.h>
-#include <linux/spinlock.h>
-#include <linux/interrupt.h>
-#include <linux/pgtable.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-#include <linux/of_irq.h>
-#include <linux/adb.h>
-
-#include <asm/io.h>
-#include <asm/hydra.h>
-#include <asm/irq.h>
-#include <linux/init.h>
-#include <linux/ioport.h>
-
-struct preg {
- unsigned char r;
- char pad[15];
-};
-
-struct adb_regs {
- struct preg intr;
- struct preg data[9];
- struct preg intr_enb;
- struct preg dcount;
- struct preg error;
- struct preg ctrl;
- struct preg autopoll;
- struct preg active_hi;
- struct preg active_lo;
- struct preg test;
-};
-
-/* Bits in intr and intr_enb registers */
-#define DFB 1 /* data from bus */
-#define TAG 2 /* transfer access grant */
-
-/* Bits in dcount register */
-#define HMB 0x0f /* how many bytes */
-#define APD 0x10 /* auto-poll data */
-
-/* Bits in error register */
-#define NRE 1 /* no response error */
-#define DLE 2 /* data lost error */
-
-/* Bits in ctrl register */
-#define TAR 1 /* transfer access request */
-#define DTB 2 /* data to bus */
-#define CRE 4 /* command response expected */
-#define ADB_RST 8 /* ADB reset */
-
-/* Bits in autopoll register */
-#define APE 1 /* autopoll enable */
-
-static volatile struct adb_regs __iomem *adb;
-static struct adb_request *current_req, *last_req;
-static DEFINE_SPINLOCK(macio_lock);
-
-static int macio_probe(void);
-static int macio_init(void);
-static irqreturn_t macio_adb_interrupt(int irq, void *arg);
-static int macio_send_request(struct adb_request *req, int sync);
-static int macio_adb_autopoll(int devs);
-static void macio_adb_poll(void);
-static int macio_adb_reset_bus(void);
-
-struct adb_driver macio_adb_driver = {
- .name = "MACIO",
- .probe = macio_probe,
- .init = macio_init,
- .send_request = macio_send_request,
- .autopoll = macio_adb_autopoll,
- .poll = macio_adb_poll,
- .reset_bus = macio_adb_reset_bus,
-};
-
-int macio_probe(void)
-{
- struct device_node *np __free(device_node) =
- of_find_compatible_node(NULL, "adb", "chrp,adb0");
-
- if (np)
- return 0;
-
- return -ENODEV;
-}
-
-int macio_init(void)
-{
- struct device_node *adbs __free(device_node) =
- of_find_compatible_node(NULL, "adb", "chrp,adb0");
- struct resource r;
- unsigned int irq;
-
- if (!adbs)
- return -ENXIO;
-
- if (of_address_to_resource(adbs, 0, &r))
- return -ENXIO;
-
- adb = ioremap(r.start, sizeof(struct adb_regs));
- if (!adb)
- return -ENOMEM;
-
-
- out_8(&adb->ctrl.r, 0);
- out_8(&adb->intr.r, 0);
- out_8(&adb->error.r, 0);
- out_8(&adb->active_hi.r, 0xff); /* for now, set all devices active */
- out_8(&adb->active_lo.r, 0xff);
- out_8(&adb->autopoll.r, APE);
-
- irq = irq_of_parse_and_map(adbs, 0);
- if (request_irq(irq, macio_adb_interrupt, 0, "ADB", (void *)0)) {
- iounmap(adb);
- printk(KERN_ERR "ADB: can't get irq %d\n", irq);
- return -EAGAIN;
- }
- out_8(&adb->intr_enb.r, DFB | TAG);
-
- printk("adb: mac-io driver 1.0 for unified ADB\n");
-
- return 0;
-}
-
-static int macio_adb_autopoll(int devs)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&macio_lock, flags);
- out_8(&adb->active_hi.r, devs >> 8);
- out_8(&adb->active_lo.r, devs);
- out_8(&adb->autopoll.r, devs? APE: 0);
- spin_unlock_irqrestore(&macio_lock, flags);
- return 0;
-}
-
-static int macio_adb_reset_bus(void)
-{
- unsigned long flags;
- int timeout = 1000000;
-
- /* Hrm... we may want to not lock interrupts for so
- * long ... oh well, who uses that chip anyway ? :)
- * That function will be seldom used during boot
- * on rare machines, so...
- */
- spin_lock_irqsave(&macio_lock, flags);
- out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | ADB_RST);
- while ((in_8(&adb->ctrl.r) & ADB_RST) != 0) {
- if (--timeout == 0) {
- out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) & ~ADB_RST);
- spin_unlock_irqrestore(&macio_lock, flags);
- return -1;
- }
- }
- spin_unlock_irqrestore(&macio_lock, flags);
- return 0;
-}
-
-/* Send an ADB command */
-static int macio_send_request(struct adb_request *req, int sync)
-{
- unsigned long flags;
- int i;
-
- if (req->data[0] != ADB_PACKET)
- return -EINVAL;
-
- for (i = 0; i < req->nbytes - 1; ++i)
- req->data[i] = req->data[i+1];
- --req->nbytes;
-
- req->next = NULL;
- req->sent = 0;
- req->complete = 0;
- req->reply_len = 0;
-
- spin_lock_irqsave(&macio_lock, flags);
- if (current_req) {
- last_req->next = req;
- last_req = req;
- } else {
- current_req = last_req = req;
- out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR);
- }
- spin_unlock_irqrestore(&macio_lock, flags);
-
- if (sync) {
- while (!req->complete)
- macio_adb_poll();
- }
-
- return 0;
-}
-
-static irqreturn_t macio_adb_interrupt(int irq, void *arg)
-{
- int i, n, err;
- struct adb_request *req = NULL;
- unsigned char ibuf[16];
- int ibuf_len = 0;
- int complete = 0;
- int autopoll = 0;
- int handled = 0;
-
- spin_lock(&macio_lock);
- if (in_8(&adb->intr.r) & TAG) {
- handled = 1;
- req = current_req;
- if (req) {
- /* put the current request in */
- for (i = 0; i < req->nbytes; ++i)
- out_8(&adb->data[i].r, req->data[i]);
- out_8(&adb->dcount.r, req->nbytes & HMB);
- req->sent = 1;
- if (req->reply_expected) {
- out_8(&adb->ctrl.r, DTB + CRE);
- } else {
- out_8(&adb->ctrl.r, DTB);
- current_req = req->next;
- complete = 1;
- if (current_req)
- out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR);
- }
- }
- out_8(&adb->intr.r, 0);
- }
-
- if (in_8(&adb->intr.r) & DFB) {
- handled = 1;
- err = in_8(&adb->error.r);
- if (current_req && current_req->sent) {
- /* this is the response to a command */
- req = current_req;
- if (err == 0) {
- req->reply_len = in_8(&adb->dcount.r) & HMB;
- for (i = 0; i < req->reply_len; ++i)
- req->reply[i] = in_8(&adb->data[i].r);
- }
- current_req = req->next;
- complete = 1;
- if (current_req)
- out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR);
- } else if (err == 0) {
- /* autopoll data */
- n = in_8(&adb->dcount.r) & HMB;
- for (i = 0; i < n; ++i)
- ibuf[i] = in_8(&adb->data[i].r);
- ibuf_len = n;
- autopoll = (in_8(&adb->dcount.r) & APD) != 0;
- }
- out_8(&adb->error.r, 0);
- out_8(&adb->intr.r, 0);
- }
- spin_unlock(&macio_lock);
- if (complete && req) {
- void (*done)(struct adb_request *) = req->done;
- mb();
- req->complete = 1;
- /* Here, we assume that if the request has a done member, the
- * struct request will survive to setting req->complete to 1
- */
- if (done)
- (*done)(req);
- }
- if (ibuf_len)
- adb_input(ibuf, ibuf_len, autopoll);
-
- return IRQ_RETVAL(handled);
-}
-
-static void macio_adb_poll(void)
-{
- unsigned long flags;
-
- local_irq_save(flags);
- if (in_8(&adb->intr.r) != 0)
- macio_adb_interrupt(0, NULL);
- local_irq_restore(flags);
-}
--
2.47.0
Powered by blists - more mailing lists