* IRDA support for NSC8739x LPC Super I/O chipsets
@ 2001-09-25 11:18 Jaroslav Kysela
2001-09-25 16:45 ` Gunther Mayer
0 siblings, 1 reply; 2+ messages in thread
From: Jaroslav Kysela @ 2001-09-25 11:18 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Alan Cox, Dag Brattli, LKML
[-- Attachment #1: Type: TEXT/PLAIN, Size: 424 bytes --]
Hello,
I've attached a patch for NSC8739x LPC Super I/O chipsets to
enable and configure the IRDA port. It works perfectly with my notebook
over a half of year but the FIR transfers has not been tested yet. It
would be nice to include this code to the official linux kernel tree.
Thank you.
Jaroslav
-----
Jaroslav Kysela <perex@suse.cz>
SuSE Linux http://www.suse.com
ALSA project http://www.alsa-project.org
[-- Attachment #2: Type: TEXT/PLAIN, Size: 5239 bytes --]
--- linux-2.4.10/drivers/net/irda/nsc-ircc.c Tue Sep 25 13:01:49 2001
+++ linux/drivers/net/irda/nsc-ircc.c Mon Sep 24 10:43:55 2001
@@ -2,7 +2,7 @@
*
* Filename: nsc-ircc.c
* Version: 1.0
- * Description: Driver for the NSC PC'108 and PC'338 IrDA chipsets
+ * Description: Driver for the NSC PC'108, PC'338 and PC'39x IrDA chipsets
* Status: Stable.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Sat Nov 7 21:43:15 1998
@@ -13,6 +13,9 @@
* Copyright (c) 1998 Lichen Wang, <lwang@actisys.com>
* Copyright (c) 1998 Actisys Corp., www.actisys.com
* All Rights Reserved
+ *
+ * 03/03/2001 Jaroslav Kysela <perex@suse.cz>
+ * Added PC8739x initialization code.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -83,8 +86,10 @@
static int nsc_ircc_probe_108(nsc_chip_t *chip, chipio_t *info);
static int nsc_ircc_probe_338(nsc_chip_t *chip, chipio_t *info);
+static int nsc_ircc_probe_39x(nsc_chip_t *chip, chipio_t *info);
static int nsc_ircc_init_108(nsc_chip_t *chip, chipio_t *info);
static int nsc_ircc_init_338(nsc_chip_t *chip, chipio_t *info);
+static int nsc_ircc_init_39x(nsc_chip_t *chip, chipio_t *info);
/* These are the known NSC chips */
static nsc_chip_t chips[] = {
@@ -92,6 +97,8 @@
nsc_ircc_probe_108, nsc_ircc_init_108 },
{ "PC87338", { 0x398, 0x15c, 0x2e }, 0x08, 0xb0, 0xf8,
nsc_ircc_probe_338, nsc_ircc_init_338 },
+ { "PC8739x", { 0x2e, 0x4e }, 0x20, 0xea, 0xff,
+ nsc_ircc_probe_39x, nsc_ircc_init_39x },
{ NULL }
};
@@ -156,7 +163,7 @@
int ret = -ENODEV;
int cfg_base;
int cfg, id;
- int reg;
+ int reg, res;
int i = 0;
/* Probe for all the NSC chipsets we know about */
@@ -197,11 +204,11 @@
* set by the BIOS
*/
if (io[i] < 0x2000) {
- chip->init(chip, &info);
+ res = chip->init(chip, &info);
} else
- chip->probe(chip, &info);
+ res = chip->probe(chip, &info);
- if (nsc_ircc_open(i, &info) == 0)
+ if (res == 0 && nsc_ircc_open(i, &info) == 0)
ret = 0;
i++;
} else {
@@ -680,6 +687,67 @@
reg = inb(cfg_base+1);
info->suspended = reg & 0x01;
+
+ return 0;
+}
+
+/*
+ * Function nsc_ircc_init_39x (chip, info)
+ *
+ * Initialize the NSC '39x chip.
+ */
+static int nsc_ircc_init_39x(nsc_chip_t *chip, chipio_t *info)
+{
+ /* No init yet */
+
+ return 0;
+}
+
+/*
+ * Function nsc_ircc_probe_39x (chip, info)
+ *
+ *
+ *
+ */
+static int nsc_ircc_probe_39x(nsc_chip_t *chip, chipio_t *info)
+{
+ int cfg_base = info->cfg_base;
+ int reg;
+
+ /* Select the SP2 logical device */
+ outb(CFG_LOGDEV, cfg_base);
+ outb(2, cfg_base + 1);
+
+ /* Read logical device activate bit */
+ outb(CFG_ACTIVATE, cfg_base);
+ if (((reg = inb(cfg_base+1)) & 1) == 0) {
+ MESSAGE("%s, the 2nd serial IR port is disabled in BIOS [0x%x]\n", driver_name, reg);
+ return -EIO;
+ }
+
+ info->enabled = reg & 0x01;
+
+ outb(CFG_BASE_LSB, cfg_base);
+ reg = inb(cfg_base + 1);
+ outb(CFG_BASE_MSB, cfg_base);
+ reg |= inb(cfg_base + 1) << 8;
+ info->fir_base = reg;
+
+ outb(CFG_IRQ, cfg_base);
+ info->irq = inb(cfg_base + 1) & 15;
+
+ outb(CFG_DMA_RX, cfg_base);
+ info->dma = inb(cfg_base + 1) & 7;
+
+ outb(CFG_DMA_TX, cfg_base);
+
+ /* Read power and bank enable register */
+ outb(CFG_SP2_CFG, cfg_base);
+ reg = inb(cfg_base+1);
+ reg |= SP2_ENBNKSEL;
+ outb(reg, cfg_base+1);
+
+ info->suspended = !((reg & 0x02) >> 1);
return 0;
}
--- linux-2.4.10/include/net/irda/nsc-ircc.h Mon Dec 11 21:59:39 2000
+++ linux/include/net/irda/nsc-ircc.h Mon Sep 24 12:20:50 2001
@@ -51,9 +51,26 @@
#define CFG_PNP1 0x1c
#define CFG_PNP3 0x4f
+/* Config register for the '39x */
+#define CFG_LOGDEV 0x07 /* select logical device, 2 = IR 2nd Serial Port */
+#define CFG_ACTIVATE 0x30
+#define CFG_BASE_MSB 0x60
+#define CFG_BASE_LSB 0x61
+#define CFG_IRQ 0x70
+#define CFG_IRQ_TYPE 0x71
+#define CFG_DMA_RX 0x74
+#define CFG_DMA_TX 0x75
+#define CFG_SP2_CFG 0xf0 /* 2nd Serial port configuration */
+
/* Flags for configuration register CRF0 */
#define APEDCRC 0x02
#define ENBNKSEL 0x01
+
+/* Flags for configuration register SP2_CFG */
+#define SP2_ENBNKSEL 0x80
+#define SP2_BUSYINDIC 0x04
+#define SP2_PMC 0x02
+#define SP2_TRISTATE 0x01
/* Set 0 */
#define TXD 0x00 /* Transmit data port */
--- linux-2.4.10/drivers/net/irda/Config.in Sun Aug 12 19:51:42 2001
+++ linux/drivers/net/irda/Config.in Mon Sep 24 12:23:18 2001
@@ -18,7 +18,7 @@
comment 'FIR device drivers'
dep_tristate 'IrDA USB dongles (Experimental)' CONFIG_USB_IRDA $CONFIG_IRDA $CONFIG_USB $CONFIG_EXPERIMENTAL
-dep_tristate 'NSC PC87108/PC87338' CONFIG_NSC_FIR $CONFIG_IRDA
+dep_tristate 'NSC PC87108/PC87338/PC8739x' CONFIG_NSC_FIR $CONFIG_IRDA
dep_tristate 'Winbond W83977AF (IR)' CONFIG_WINBOND_FIR $CONFIG_IRDA
dep_tristate 'Toshiba Type-O IR Port' CONFIG_TOSHIBA_FIR $CONFIG_IRDA
if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: IRDA support for NSC8739x LPC Super I/O chipsets
2001-09-25 11:18 IRDA support for NSC8739x LPC Super I/O chipsets Jaroslav Kysela
@ 2001-09-25 16:45 ` Gunther Mayer
0 siblings, 0 replies; 2+ messages in thread
From: Gunther Mayer @ 2001-09-25 16:45 UTC (permalink / raw)
To: Jaroslav Kysela; +Cc: Linus Torvalds, Alan Cox, Dag Brattli, LKML
Jaroslav Kysela wrote:
>
> Hello,
>
> I've attached a patch for NSC8739x LPC Super I/O chipsets to
> enable and configure the IRDA port. It works perfectly with my notebook
> over a half of year but the FIR transfers has not been tested yet. It
> would be nice to include this code to the official linux kernel tree.
> Thank you.
This should probably go to user space, too
Can't you set "IR" in your notebook BIOS? Then try "lspnp"
and a serial port should disappear if favour of infrared.
-
Gunther
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2001-09-25 16:45 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-09-25 11:18 IRDA support for NSC8739x LPC Super I/O chipsets Jaroslav Kysela
2001-09-25 16:45 ` Gunther Mayer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®