<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fpga</id>
	<title>ThinkWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fpga"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Fpga"/>
	<updated>2026-05-09T16:22:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Category_talk:760ED&amp;diff=25296</id>
		<title>Category talk:760ED</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Category_talk:760ED&amp;diff=25296"/>
		<updated>2006-10-16T11:35:03Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From the web messages cardbus does not work as no IRQ can be mapped. This is a physical problem because the wires for INTx is not connected. Linux will report IRQ 0 and tell you to use biosirq but it does not help. Only non-cardbus devices work. It is nice if someone can tell us how to fix it?&lt;br /&gt;
&lt;br /&gt;
The Cardbus of the 760ED is working fine if you patch the kernel to route IRQ to a isa interupt.&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24698</id>
		<title>760ed yenta patch</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24698"/>
		<updated>2006-09-17T13:50:23Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a kernel patch for a IBM Thinkpad [[:Category:760ED|760ED]] notebook.&lt;br /&gt;
&lt;br /&gt;
The pci irq pin of the ti1130 pcmcia bridge is not connected.&lt;br /&gt;
To use the cardbus, the kernel has to route the cardbus irq to an isa irq.&lt;br /&gt;
This patch detects an valid irq and route cardbus interupts to isa instead &lt;br /&gt;
of pci. (If a valid pci irq is detected it should use it and not the isa irq.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/i82365.h linux-2.6.15.1-jck/drivers/pcmcia/i82365.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/i82365.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/i82365.h	2006-02-18 17:34:35.000000000 +0100&lt;br /&gt;
@@ -88,13 +88,14 @@&lt;br /&gt;
 #define I365_IRQ_MASK	0x0F&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_CSC and I365_CSCINT*/&lt;br /&gt;
-#define I365_CSC_BVD1	0x01&lt;br /&gt;
-#define I365_CSC_STSCHG	0x01&lt;br /&gt;
-#define I365_CSC_BVD2	0x02&lt;br /&gt;
-#define I365_CSC_READY	0x04&lt;br /&gt;
-#define I365_CSC_DETECT	0x08&lt;br /&gt;
-#define I365_CSC_ANY	0x0F&lt;br /&gt;
-#define I365_CSC_GPI	0x10&lt;br /&gt;
+#define I365_CSC_BVD1		0x01&lt;br /&gt;
+#define I365_CSC_STSCHG		0x01&lt;br /&gt;
+#define I365_CSC_BVD2		0x02&lt;br /&gt;
+#define I365_CSC_READY		0x04&lt;br /&gt;
+#define I365_CSC_DETECT		0x08&lt;br /&gt;
+#define I365_CSC_ANY		0x0F&lt;br /&gt;
+#define I365_CSC_GPI		0x10&lt;br /&gt;
+#define I365_CSC_IRQ_MASK	0xF0&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_ADDRWIN */&lt;br /&gt;
 #define I365_ENA_IO(map)	(0x40 &amp;lt;&amp;lt; (map))&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/ti113x.h linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/ti113x.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h	2006-03-15 10:13:32.000000000 +0100&lt;br /&gt;
@@ -304,6 +304,18 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static int ti113x_init(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+        u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+&lt;br /&gt;
+        new = reg &amp;amp; ~I365_INTR_ENA;&lt;br /&gt;
+        if ( socket-&amp;gt;dev-&amp;gt;irq ) /* PCI IRQ */&lt;br /&gt;
+                new |= I365_INTR_ENA;&lt;br /&gt;
+        if (new != reg)&lt;br /&gt;
+                exca_writeb(socket, I365_INTCTL, new);&lt;br /&gt;
+        return 0;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
@@ -317,14 +329,42 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static void ti113x_use_isa_irq(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+	int isa_irq;&lt;br /&gt;
+	u8 intctl;&lt;br /&gt;
+	u32 isa_irq_mask;&lt;br /&gt;
+&lt;br /&gt;
+	/* get a free isa int */&lt;br /&gt;
+	isa_irq_mask = 0;&lt;br /&gt;
+        if (isa_probe)&lt;br /&gt;
+                isa_irq_mask = yenta_probe_irq(socket, 0x0ef8); /* 0x0ef8 =&amp;gt; only common isa irqs */&lt;br /&gt;
+	if ( !(isa_irq_mask &amp;amp; 0xFFFF) ) return; /* no useable isa irq found */&lt;br /&gt;
+	for(isa_irq = -1 ; isa_irq_mask ; isa_irq++ ) /* choose highest available */&lt;br /&gt;
+		isa_irq_mask &amp;gt;&amp;gt;= 1;&lt;br /&gt;
+&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, (isa_irq &amp;lt;&amp;lt; 4) );  /* CSC */&lt;br /&gt;
+&lt;br /&gt;
+	socket-&amp;gt;cb_irq = isa_irq;&lt;br /&gt;
+&lt;br /&gt;
+	intctl = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+	intctl &amp;amp;= ~(I365_INTR_ENA | I365_IRQ_MASK);	/* CSC Enable */&lt;br /&gt;
+	exca_writeb(socket, I365_INTCTL, intctl );&lt;br /&gt;
+&lt;br /&gt;
+        printk(KERN_INFO &amp;quot;Yenta TI113x: using isa irq %d\n&amp;quot;, isa_irq);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti113x_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 cardctl;&lt;br /&gt;
 &lt;br /&gt;
 	cardctl = config_readb(socket, TI113X_CARD_CONTROL);&lt;br /&gt;
 	cardctl &amp;amp;= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC);&lt;br /&gt;
-	if (socket-&amp;gt;cb_irq)&lt;br /&gt;
+	if (socket-&amp;gt;dev-&amp;gt;irq)&lt;br /&gt;
 		cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;&lt;br /&gt;
+	else&lt;br /&gt;
+		ti113x_use_isa_irq(socket);&lt;br /&gt;
+&lt;br /&gt;
 	config_writeb(socket, TI113X_CARD_CONTROL, cardctl);&lt;br /&gt;
 &lt;br /&gt;
 	return ti_override(socket);&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/yenta_socket.c linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/yenta_socket.c	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c	2006-03-12 01:05:34.000000000 +0100&lt;br /&gt;
@@ -50,7 +50,7 @@&lt;br /&gt;
 #define to_ns(cycles)	((cycles)*120)&lt;br /&gt;
 &lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket);&lt;br /&gt;
-&lt;br /&gt;
+static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask);&lt;br /&gt;
 &lt;br /&gt;
 static unsigned int override_bios;&lt;br /&gt;
 module_param(override_bios, uint, 0000);&lt;br /&gt;
@@ -379,9 +379,12 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* ISA interrupt control? */&lt;br /&gt;
 		intr = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
-		intr = (intr &amp;amp; ~0xf);&lt;br /&gt;
-		if (!socket-&amp;gt;cb_irq) {&lt;br /&gt;
-			intr |= state-&amp;gt;io_irq;&lt;br /&gt;
+		intr &amp;amp;= ~(I365_IRQ_MASK);&lt;br /&gt;
+		if (!socket-&amp;gt;dev-&amp;gt;irq) {  /* is there a valid pci irq ? */&lt;br /&gt;
+			if(socket-&amp;gt;cb_irq)&lt;br /&gt;
+				intr |= socket-&amp;gt;cb_irq;&lt;br /&gt;
+			else&lt;br /&gt;
+				intr |= socket-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
 		exca_writeb(socket, I365_INTCTL, intr);&lt;br /&gt;
@@ -391,7 +394,7 @@&lt;br /&gt;
 		reg = exca_readb(socket, I365_INTCTL) &amp;amp; (I365_RING_ENA | I365_INTR_ENA);&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_RESET) ? 0 : I365_PC_RESET;&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_IOCARD) ? I365_PC_IOCARD : 0;&lt;br /&gt;
-		if (state-&amp;gt;io_irq != socket-&amp;gt;cb_irq) {&lt;br /&gt;
+		if (state-&amp;gt;io_irq) {&lt;br /&gt;
 			reg |= state-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
@@ -404,8 +407,10 @@&lt;br /&gt;
 		if (exca_readb(socket, I365_POWER) != reg)&lt;br /&gt;
 			exca_writeb(socket, I365_POWER, reg);&lt;br /&gt;
 &lt;br /&gt;
-		/* CSC interrupt: no ISA irq for CSC */&lt;br /&gt;
-		reg = I365_CSC_DETECT;&lt;br /&gt;
+		reg = exca_readb(socket, I365_CSCINT);  /*keep isa IRQs for CSC*/&lt;br /&gt;
+		reg &amp;amp;= I365_CSC_IRQ_MASK;&lt;br /&gt;
+		reg |= I365_CSC_DETECT;&lt;br /&gt;
+&lt;br /&gt;
 		if (state-&amp;gt;flags &amp;amp; SS_IOCARD) {&lt;br /&gt;
 			if (state-&amp;gt;csc_mask &amp;amp; SS_STSCHG) reg |= I365_CSC_STSCHG;&lt;br /&gt;
 		} else {&lt;br /&gt;
@@ -868,7 +873,7 @@&lt;br /&gt;
 		.override	= ti113x_override,&lt;br /&gt;
 		.save_state	= ti_save_state,&lt;br /&gt;
 		.restore_state	= ti_restore_state,&lt;br /&gt;
-		.sock_init	= ti_init,&lt;br /&gt;
+		.sock_init	= ti113x_init,&lt;br /&gt;
 	},&lt;br /&gt;
 	[CARDBUS_TYPE_TI12XX]	= {&lt;br /&gt;
 		.override	= ti12xx_override,&lt;br /&gt;
@@ -922,6 +927,7 @@&lt;br /&gt;
 	int i;&lt;br /&gt;
 	unsigned long val;&lt;br /&gt;
 	u32 mask;&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * Probe for usable interrupts using the force&lt;br /&gt;
@@ -929,6 +935,7 @@&lt;br /&gt;
 	 */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
 	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
 	val = probe_irq_on() &amp;amp; isa_irq_mask;&lt;br /&gt;
 	for (i = 1; i &amp;lt; 16; i++) {&lt;br /&gt;
@@ -940,7 +947,7 @@&lt;br /&gt;
 		cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	}&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 &lt;br /&gt;
 	mask = probe_irq_mask(val) &amp;amp; 0xffff;&lt;br /&gt;
 &lt;br /&gt;
@@ -971,6 +978,8 @@&lt;br /&gt;
 /* probes the PCI interrupt, use only on override functions */&lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
+&lt;br /&gt;
 	if (!socket-&amp;gt;cb_irq)&lt;br /&gt;
 		return -1;&lt;br /&gt;
 &lt;br /&gt;
@@ -982,7 +991,9 @@&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/* generate interrupt, wait */&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);&lt;br /&gt;
+&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);&lt;br /&gt;
@@ -991,7 +1002,7 @@&lt;br /&gt;
 &lt;br /&gt;
 	/* disable interrupts */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	exca_readb(socket, I365_CSC);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{HELP|&lt;br /&gt;
It is untested if these changes are not breaking other ti pcmcia bridges.&lt;br /&gt;
( Maybe someone can test this patch on other hardware.&lt;br /&gt;
And please review the changes, especially those in yenta_socket.c )&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:760ED]]&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Installation_instructions_for_the_ThinkPad_760&amp;diff=24695</id>
		<title>Installation instructions for the ThinkPad 760</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Installation_instructions_for_the_ThinkPad_760&amp;diff=24695"/>
		<updated>2006-09-17T13:36:59Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Specific installation notes for the ThinkPad {{760C}}, {{760CD}}, {{760E}}, {{760ED}}, {{760EL}}, {{760ELD}}, {{760L}}, {{760LD}}, {{760XD}} and {{760XL}}.&lt;br /&gt;
&lt;br /&gt;
==General Notes==&lt;br /&gt;
One of the main pitfalls to installing Linux on this ThinkPad line is the lack of bootable CD-ROM support.  Though it is possible to install using a set of startup floppies, being sure to get one for PCMCIA support and another for network drivers, it tends to be more of a headache than it is worth.  Using a utility like sbootmgr (available from the Slackware server [ftp://ftp.slackware.com/pub/slackware/slackware-current/isolinux/sbootmgr here], the [http://btmgr.webframe.org/ homepage] of the software is curiously out-of-date) makes this headache virtually disappear.  Simply write the image to a floppy drive, and boot up.  Highlight the hard disk in the Main Boot menu screen that appears. Then hit Tab to enter the Main Menu, head down to System Settings, press Enter, select Install Smart BootManager, and answer Y.  Turn your computer off, swap the CD-ROM into it, insert the Linux distro of your choice, and boot up.  Smart BootManager will start up, and you'll need to head back into the System Settings menu and Rescan All Partitions to add the new bootable CD-ROM to sbootmgr's list.  After you've done this, your CD-ROM will be in the menu, which you can then boot from, by highlighting it, heading back into the menu, and selecting &amp;quot;Boot It.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Granted, a CD-ROM was an option on some of the models in this line, so if you don't have one, you'll either have to get one from eBay (about $20) or fall back on using a network install.&lt;br /&gt;
&lt;br /&gt;
==Distro specific Instructions==&lt;br /&gt;
&lt;br /&gt;
==External Sources==&lt;br /&gt;
===ThinkPad 760E===&lt;br /&gt;
*[http://www.geocities.com/SiliconValley/9111/ibmtp760/index.html Slackware 4.0 on a ThinkPad 760E]&lt;br /&gt;
&lt;br /&gt;
===ThinkPad 760ED===&lt;br /&gt;
*[http://www.qsl.net/n0nb/linux/tp760ed.html Nate Bargmann's Debian on a ThinkPad 760ED page]&lt;br /&gt;
*[http://web.archive.org/web/20040604223902/http://www.eecs.lehigh.edu/~tboult/linux/thinkpad760ed.html Red Hat 4.2 on a ThinkPad 760ED/760XD]&lt;br /&gt;
*[[760ed yenta patch]] for Kernel 2.6.15.1 to use the cardbus with interrupts&lt;br /&gt;
===ThinkPad 760EL===&lt;br /&gt;
*[http://www.geocities.com/SiliconValley/9111/ibmtp760/thinkpad.html Harald Milz's Linux on a ThinkPad 760EL page]&lt;br /&gt;
*[http://patter.mine.nu/thinkpad.html Debian on a ThinkPad 760EL]&lt;br /&gt;
*[http://personal.riverusers.com/~thegrendel/laptop.html Mandrake 6.1 on a ThinkPad 760EL]&lt;br /&gt;
*[http://www.btinternet.com/~zeltanet/zeltanet/thinkpad760el_linux.htm Mandrake 7.0 on a ThinkPad 760EL]&lt;br /&gt;
*[http://www.geocities.com/dueze/thinkpad760el.html Slackware 7.1 on a ThinkPad 760EL]&lt;br /&gt;
*[http://stephe_2.tripod.com/thinkpad/ Stephe's Red Hat 7.0 on a ThinkPad 760EL page]&lt;br /&gt;
&lt;br /&gt;
===ThinkPad 760XL===&lt;br /&gt;
*[http://www.grnet.com/sc/linux/tp760xl/ Mike Mol's Debian Woody on a ThinkPad 760XL page]&lt;br /&gt;
*[http://www.monkeynoodle.org/comp/hardware/760xl.html Red Hat 5.2 on a ThinkPad 760XL]&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24694</id>
		<title>760ed yenta patch</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24694"/>
		<updated>2006-09-17T13:11:55Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a kernel patch for a IBM Thinkpad 760ED notebook.&lt;br /&gt;
&lt;br /&gt;
The pci irq pin of the ti1130 pcmcia bridge is not connected.&lt;br /&gt;
To use the cardbus, the irq has to be routed to an isa irq.&lt;br /&gt;
This patch detects an valid irq and route cardbus interupts to isa instead &lt;br /&gt;
of pci. (If a valid pci irq is detected it should use it and not the isa irq.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/i82365.h linux-2.6.15.1-jck/drivers/pcmcia/i82365.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/i82365.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/i82365.h	2006-02-18 17:34:35.000000000 +0100&lt;br /&gt;
@@ -88,13 +88,14 @@&lt;br /&gt;
 #define I365_IRQ_MASK	0x0F&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_CSC and I365_CSCINT*/&lt;br /&gt;
-#define I365_CSC_BVD1	0x01&lt;br /&gt;
-#define I365_CSC_STSCHG	0x01&lt;br /&gt;
-#define I365_CSC_BVD2	0x02&lt;br /&gt;
-#define I365_CSC_READY	0x04&lt;br /&gt;
-#define I365_CSC_DETECT	0x08&lt;br /&gt;
-#define I365_CSC_ANY	0x0F&lt;br /&gt;
-#define I365_CSC_GPI	0x10&lt;br /&gt;
+#define I365_CSC_BVD1		0x01&lt;br /&gt;
+#define I365_CSC_STSCHG		0x01&lt;br /&gt;
+#define I365_CSC_BVD2		0x02&lt;br /&gt;
+#define I365_CSC_READY		0x04&lt;br /&gt;
+#define I365_CSC_DETECT		0x08&lt;br /&gt;
+#define I365_CSC_ANY		0x0F&lt;br /&gt;
+#define I365_CSC_GPI		0x10&lt;br /&gt;
+#define I365_CSC_IRQ_MASK	0xF0&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_ADDRWIN */&lt;br /&gt;
 #define I365_ENA_IO(map)	(0x40 &amp;lt;&amp;lt; (map))&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/ti113x.h linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/ti113x.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h	2006-03-15 10:13:32.000000000 +0100&lt;br /&gt;
@@ -304,6 +304,18 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static int ti113x_init(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+        u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+&lt;br /&gt;
+        new = reg &amp;amp; ~I365_INTR_ENA;&lt;br /&gt;
+        if ( socket-&amp;gt;dev-&amp;gt;irq ) /* PCI IRQ */&lt;br /&gt;
+                new |= I365_INTR_ENA;&lt;br /&gt;
+        if (new != reg)&lt;br /&gt;
+                exca_writeb(socket, I365_INTCTL, new);&lt;br /&gt;
+        return 0;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
@@ -317,14 +329,42 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static void ti113x_use_isa_irq(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+	int isa_irq;&lt;br /&gt;
+	u8 intctl;&lt;br /&gt;
+	u32 isa_irq_mask;&lt;br /&gt;
+&lt;br /&gt;
+	/* get a free isa int */&lt;br /&gt;
+	isa_irq_mask = 0;&lt;br /&gt;
+        if (isa_probe)&lt;br /&gt;
+                isa_irq_mask = yenta_probe_irq(socket, 0x0ef8); /* 0x0ef8 =&amp;gt; only common isa irqs */&lt;br /&gt;
+	if ( !(isa_irq_mask &amp;amp; 0xFFFF) ) return; /* no useable isa irq found */&lt;br /&gt;
+	for(isa_irq = -1 ; isa_irq_mask ; isa_irq++ ) /* choose highest available */&lt;br /&gt;
+		isa_irq_mask &amp;gt;&amp;gt;= 1;&lt;br /&gt;
+&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, (isa_irq &amp;lt;&amp;lt; 4) );  /* CSC */&lt;br /&gt;
+&lt;br /&gt;
+	socket-&amp;gt;cb_irq = isa_irq;&lt;br /&gt;
+&lt;br /&gt;
+	intctl = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+	intctl &amp;amp;= ~(I365_INTR_ENA | I365_IRQ_MASK);	/* CSC Enable */&lt;br /&gt;
+	exca_writeb(socket, I365_INTCTL, intctl );&lt;br /&gt;
+&lt;br /&gt;
+        printk(KERN_INFO &amp;quot;Yenta TI113x: using isa irq %d\n&amp;quot;, isa_irq);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti113x_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 cardctl;&lt;br /&gt;
 &lt;br /&gt;
 	cardctl = config_readb(socket, TI113X_CARD_CONTROL);&lt;br /&gt;
 	cardctl &amp;amp;= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC);&lt;br /&gt;
-	if (socket-&amp;gt;cb_irq)&lt;br /&gt;
+	if (socket-&amp;gt;dev-&amp;gt;irq)&lt;br /&gt;
 		cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;&lt;br /&gt;
+	else&lt;br /&gt;
+		ti113x_use_isa_irq(socket);&lt;br /&gt;
+&lt;br /&gt;
 	config_writeb(socket, TI113X_CARD_CONTROL, cardctl);&lt;br /&gt;
 &lt;br /&gt;
 	return ti_override(socket);&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/yenta_socket.c linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/yenta_socket.c	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c	2006-03-12 01:05:34.000000000 +0100&lt;br /&gt;
@@ -50,7 +50,7 @@&lt;br /&gt;
 #define to_ns(cycles)	((cycles)*120)&lt;br /&gt;
 &lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket);&lt;br /&gt;
-&lt;br /&gt;
+static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask);&lt;br /&gt;
 &lt;br /&gt;
 static unsigned int override_bios;&lt;br /&gt;
 module_param(override_bios, uint, 0000);&lt;br /&gt;
@@ -379,9 +379,12 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* ISA interrupt control? */&lt;br /&gt;
 		intr = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
-		intr = (intr &amp;amp; ~0xf);&lt;br /&gt;
-		if (!socket-&amp;gt;cb_irq) {&lt;br /&gt;
-			intr |= state-&amp;gt;io_irq;&lt;br /&gt;
+		intr &amp;amp;= ~(I365_IRQ_MASK);&lt;br /&gt;
+		if (!socket-&amp;gt;dev-&amp;gt;irq) {  /* is there a valid pci irq ? */&lt;br /&gt;
+			if(socket-&amp;gt;cb_irq)&lt;br /&gt;
+				intr |= socket-&amp;gt;cb_irq;&lt;br /&gt;
+			else&lt;br /&gt;
+				intr |= socket-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
 		exca_writeb(socket, I365_INTCTL, intr);&lt;br /&gt;
@@ -391,7 +394,7 @@&lt;br /&gt;
 		reg = exca_readb(socket, I365_INTCTL) &amp;amp; (I365_RING_ENA | I365_INTR_ENA);&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_RESET) ? 0 : I365_PC_RESET;&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_IOCARD) ? I365_PC_IOCARD : 0;&lt;br /&gt;
-		if (state-&amp;gt;io_irq != socket-&amp;gt;cb_irq) {&lt;br /&gt;
+		if (state-&amp;gt;io_irq) {&lt;br /&gt;
 			reg |= state-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
@@ -404,8 +407,10 @@&lt;br /&gt;
 		if (exca_readb(socket, I365_POWER) != reg)&lt;br /&gt;
 			exca_writeb(socket, I365_POWER, reg);&lt;br /&gt;
 &lt;br /&gt;
-		/* CSC interrupt: no ISA irq for CSC */&lt;br /&gt;
-		reg = I365_CSC_DETECT;&lt;br /&gt;
+		reg = exca_readb(socket, I365_CSCINT);  /*keep isa IRQs for CSC*/&lt;br /&gt;
+		reg &amp;amp;= I365_CSC_IRQ_MASK;&lt;br /&gt;
+		reg |= I365_CSC_DETECT;&lt;br /&gt;
+&lt;br /&gt;
 		if (state-&amp;gt;flags &amp;amp; SS_IOCARD) {&lt;br /&gt;
 			if (state-&amp;gt;csc_mask &amp;amp; SS_STSCHG) reg |= I365_CSC_STSCHG;&lt;br /&gt;
 		} else {&lt;br /&gt;
@@ -868,7 +873,7 @@&lt;br /&gt;
 		.override	= ti113x_override,&lt;br /&gt;
 		.save_state	= ti_save_state,&lt;br /&gt;
 		.restore_state	= ti_restore_state,&lt;br /&gt;
-		.sock_init	= ti_init,&lt;br /&gt;
+		.sock_init	= ti113x_init,&lt;br /&gt;
 	},&lt;br /&gt;
 	[CARDBUS_TYPE_TI12XX]	= {&lt;br /&gt;
 		.override	= ti12xx_override,&lt;br /&gt;
@@ -922,6 +927,7 @@&lt;br /&gt;
 	int i;&lt;br /&gt;
 	unsigned long val;&lt;br /&gt;
 	u32 mask;&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * Probe for usable interrupts using the force&lt;br /&gt;
@@ -929,6 +935,7 @@&lt;br /&gt;
 	 */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
 	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
 	val = probe_irq_on() &amp;amp; isa_irq_mask;&lt;br /&gt;
 	for (i = 1; i &amp;lt; 16; i++) {&lt;br /&gt;
@@ -940,7 +947,7 @@&lt;br /&gt;
 		cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	}&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 &lt;br /&gt;
 	mask = probe_irq_mask(val) &amp;amp; 0xffff;&lt;br /&gt;
 &lt;br /&gt;
@@ -971,6 +978,8 @@&lt;br /&gt;
 /* probes the PCI interrupt, use only on override functions */&lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
+&lt;br /&gt;
 	if (!socket-&amp;gt;cb_irq)&lt;br /&gt;
 		return -1;&lt;br /&gt;
 &lt;br /&gt;
@@ -982,7 +991,9 @@&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/* generate interrupt, wait */&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);&lt;br /&gt;
+&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);&lt;br /&gt;
@@ -991,7 +1002,7 @@&lt;br /&gt;
 &lt;br /&gt;
 	/* disable interrupts */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	exca_readb(socket, I365_CSC);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{HELP|&lt;br /&gt;
It is untested if these changes are not breaking other ti pcmcia bridges.&lt;br /&gt;
( Maybe someone can test this patch on other hardware.&lt;br /&gt;
And please review the changes, especially those in yenta_socket.c )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24693</id>
		<title>760ed yenta patch</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24693"/>
		<updated>2006-09-17T13:01:57Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a kernel patch for a IBM Thinkpad 760ED notebook.&lt;br /&gt;
&lt;br /&gt;
The pci irq pin of the ti1130 pcmcia bridge is not connected.&lt;br /&gt;
To use the cardbus, the irq has to be routed to an isa irq.&lt;br /&gt;
This patch detects an valid irq and route cardbus interupts to isa instead &lt;br /&gt;
of pci. (If a valid pci irq is detected it should use it and not the isa irq.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/i82365.h linux-2.6.15.1-jck/drivers/pcmcia/i82365.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/i82365.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/i82365.h	2006-02-18 17:34:35.000000000 +0100&lt;br /&gt;
@@ -88,13 +88,14 @@&lt;br /&gt;
 #define I365_IRQ_MASK	0x0F&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_CSC and I365_CSCINT*/&lt;br /&gt;
-#define I365_CSC_BVD1	0x01&lt;br /&gt;
-#define I365_CSC_STSCHG	0x01&lt;br /&gt;
-#define I365_CSC_BVD2	0x02&lt;br /&gt;
-#define I365_CSC_READY	0x04&lt;br /&gt;
-#define I365_CSC_DETECT	0x08&lt;br /&gt;
-#define I365_CSC_ANY	0x0F&lt;br /&gt;
-#define I365_CSC_GPI	0x10&lt;br /&gt;
+#define I365_CSC_BVD1		0x01&lt;br /&gt;
+#define I365_CSC_STSCHG		0x01&lt;br /&gt;
+#define I365_CSC_BVD2		0x02&lt;br /&gt;
+#define I365_CSC_READY		0x04&lt;br /&gt;
+#define I365_CSC_DETECT		0x08&lt;br /&gt;
+#define I365_CSC_ANY		0x0F&lt;br /&gt;
+#define I365_CSC_GPI		0x10&lt;br /&gt;
+#define I365_CSC_IRQ_MASK	0xF0&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_ADDRWIN */&lt;br /&gt;
 #define I365_ENA_IO(map)	(0x40 &amp;lt;&amp;lt; (map))&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/ti113x.h linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/ti113x.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h	2006-03-15 10:13:32.000000000 +0100&lt;br /&gt;
@@ -304,6 +304,18 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static int ti113x_init(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+        u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+&lt;br /&gt;
+        new = reg &amp;amp; ~I365_INTR_ENA;&lt;br /&gt;
+        if ( socket-&amp;gt;dev-&amp;gt;irq ) /* PCI IRQ */&lt;br /&gt;
+                new |= I365_INTR_ENA;&lt;br /&gt;
+        if (new != reg)&lt;br /&gt;
+                exca_writeb(socket, I365_INTCTL, new);&lt;br /&gt;
+        return 0;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
@@ -317,14 +329,42 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static void ti113x_use_isa_irq(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+	int isa_irq;&lt;br /&gt;
+	u8 intctl;&lt;br /&gt;
+	u32 isa_irq_mask;&lt;br /&gt;
+&lt;br /&gt;
+	/* get a free isa int */&lt;br /&gt;
+	isa_irq_mask = 0;&lt;br /&gt;
+        if (isa_probe)&lt;br /&gt;
+                isa_irq_mask = yenta_probe_irq(socket, 0x0ef8); /* 0x0ef8 =&amp;gt; only common isa irqs */&lt;br /&gt;
+	if ( !(isa_irq_mask &amp;amp; 0xFFFF) ) return; /* no useable isa irq found */&lt;br /&gt;
+	for(isa_irq = -1 ; isa_irq_mask ; isa_irq++ ) /* choose highest available */&lt;br /&gt;
+		isa_irq_mask &amp;gt;&amp;gt;= 1;&lt;br /&gt;
+&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, (isa_irq &amp;lt;&amp;lt; 4) );  /* CSC */&lt;br /&gt;
+&lt;br /&gt;
+	socket-&amp;gt;cb_irq = isa_irq;&lt;br /&gt;
+&lt;br /&gt;
+	intctl = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+	intctl &amp;amp;= ~(I365_INTR_ENA | I365_IRQ_MASK);	/* CSC Enable */&lt;br /&gt;
+	exca_writeb(socket, I365_INTCTL, intctl );&lt;br /&gt;
+&lt;br /&gt;
+        printk(KERN_INFO &amp;quot;Yenta TI113x: using isa irq %d\n&amp;quot;, isa_irq);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti113x_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 cardctl;&lt;br /&gt;
 &lt;br /&gt;
 	cardctl = config_readb(socket, TI113X_CARD_CONTROL);&lt;br /&gt;
 	cardctl &amp;amp;= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC);&lt;br /&gt;
-	if (socket-&amp;gt;cb_irq)&lt;br /&gt;
+	if (socket-&amp;gt;dev-&amp;gt;irq)&lt;br /&gt;
 		cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;&lt;br /&gt;
+	else&lt;br /&gt;
+		ti113x_use_isa_irq(socket);&lt;br /&gt;
+&lt;br /&gt;
 	config_writeb(socket, TI113X_CARD_CONTROL, cardctl);&lt;br /&gt;
 &lt;br /&gt;
 	return ti_override(socket);&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/yenta_socket.c linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/yenta_socket.c	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c	2006-03-12 01:05:34.000000000 +0100&lt;br /&gt;
@@ -50,7 +50,7 @@&lt;br /&gt;
 #define to_ns(cycles)	((cycles)*120)&lt;br /&gt;
 &lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket);&lt;br /&gt;
-&lt;br /&gt;
+static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask);&lt;br /&gt;
 &lt;br /&gt;
 static unsigned int override_bios;&lt;br /&gt;
 module_param(override_bios, uint, 0000);&lt;br /&gt;
@@ -379,9 +379,12 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* ISA interrupt control? */&lt;br /&gt;
 		intr = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
-		intr = (intr &amp;amp; ~0xf);&lt;br /&gt;
-		if (!socket-&amp;gt;cb_irq) {&lt;br /&gt;
-			intr |= state-&amp;gt;io_irq;&lt;br /&gt;
+		intr &amp;amp;= ~(I365_IRQ_MASK);&lt;br /&gt;
+		if (!socket-&amp;gt;dev-&amp;gt;irq) {  /* is there a valid pci irq ? */&lt;br /&gt;
+			if(socket-&amp;gt;cb_irq)&lt;br /&gt;
+				intr |= socket-&amp;gt;cb_irq;&lt;br /&gt;
+			else&lt;br /&gt;
+				intr |= socket-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
 		exca_writeb(socket, I365_INTCTL, intr);&lt;br /&gt;
@@ -391,7 +394,7 @@&lt;br /&gt;
 		reg = exca_readb(socket, I365_INTCTL) &amp;amp; (I365_RING_ENA | I365_INTR_ENA);&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_RESET) ? 0 : I365_PC_RESET;&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_IOCARD) ? I365_PC_IOCARD : 0;&lt;br /&gt;
-		if (state-&amp;gt;io_irq != socket-&amp;gt;cb_irq) {&lt;br /&gt;
+		if (state-&amp;gt;io_irq) {&lt;br /&gt;
 			reg |= state-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
@@ -404,8 +407,10 @@&lt;br /&gt;
 		if (exca_readb(socket, I365_POWER) != reg)&lt;br /&gt;
 			exca_writeb(socket, I365_POWER, reg);&lt;br /&gt;
 &lt;br /&gt;
-		/* CSC interrupt: no ISA irq for CSC */&lt;br /&gt;
-		reg = I365_CSC_DETECT;&lt;br /&gt;
+		reg = exca_readb(socket, I365_CSCINT);  /*keep isa IRQs for CSC*/&lt;br /&gt;
+		reg &amp;amp;= I365_CSC_IRQ_MASK;&lt;br /&gt;
+		reg |= I365_CSC_DETECT;&lt;br /&gt;
+&lt;br /&gt;
 		if (state-&amp;gt;flags &amp;amp; SS_IOCARD) {&lt;br /&gt;
 			if (state-&amp;gt;csc_mask &amp;amp; SS_STSCHG) reg |= I365_CSC_STSCHG;&lt;br /&gt;
 		} else {&lt;br /&gt;
@@ -868,7 +873,7 @@&lt;br /&gt;
 		.override	= ti113x_override,&lt;br /&gt;
 		.save_state	= ti_save_state,&lt;br /&gt;
 		.restore_state	= ti_restore_state,&lt;br /&gt;
-		.sock_init	= ti_init,&lt;br /&gt;
+		.sock_init	= ti113x_init,&lt;br /&gt;
 	},&lt;br /&gt;
 	[CARDBUS_TYPE_TI12XX]	= {&lt;br /&gt;
 		.override	= ti12xx_override,&lt;br /&gt;
@@ -922,6 +927,7 @@&lt;br /&gt;
 	int i;&lt;br /&gt;
 	unsigned long val;&lt;br /&gt;
 	u32 mask;&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * Probe for usable interrupts using the force&lt;br /&gt;
@@ -929,6 +935,7 @@&lt;br /&gt;
 	 */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
 	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
 	val = probe_irq_on() &amp;amp; isa_irq_mask;&lt;br /&gt;
 	for (i = 1; i &amp;lt; 16; i++) {&lt;br /&gt;
@@ -940,7 +947,7 @@&lt;br /&gt;
 		cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	}&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 &lt;br /&gt;
 	mask = probe_irq_mask(val) &amp;amp; 0xffff;&lt;br /&gt;
 &lt;br /&gt;
@@ -971,6 +978,8 @@&lt;br /&gt;
 /* probes the PCI interrupt, use only on override functions */&lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
+&lt;br /&gt;
 	if (!socket-&amp;gt;cb_irq)&lt;br /&gt;
 		return -1;&lt;br /&gt;
 &lt;br /&gt;
@@ -982,7 +991,9 @@&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/* generate interrupt, wait */&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);&lt;br /&gt;
+&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);&lt;br /&gt;
@@ -991,7 +1002,7 @@&lt;br /&gt;
 &lt;br /&gt;
 	/* disable interrupts */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	exca_readb(socket, I365_CSC);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is untested if these changes are not breaking other ti pcmcia bridges.&lt;br /&gt;
( Maybe someone can test this patch on other hardware.&lt;br /&gt;
And please review the changes, especially those in yenta_socket.c )&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24692</id>
		<title>760ed yenta patch</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24692"/>
		<updated>2006-09-17T12:59:59Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a kernel patch for a IBM Thinkpad 760ED notebook.&lt;br /&gt;
&lt;br /&gt;
The pci irq pin of the ti1130 pcmcia bridge is not connected.&lt;br /&gt;
To use the cardbus, the irq has to be routed to an isa irq.&lt;br /&gt;
This patch detects an valid irq and route cardbus interupts to isa instead &lt;br /&gt;
of pci. (If a valid pci irq is detected it should use it and not the isa irq.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/i82365.h linux-2.6.15.1-jck/drivers/pcmcia/i82365.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/i82365.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/i82365.h	2006-02-18 17:34:35.000000000 +0100&lt;br /&gt;
@@ -88,13 +88,14 @@&lt;br /&gt;
 #define I365_IRQ_MASK	0x0F&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_CSC and I365_CSCINT*/&lt;br /&gt;
-#define I365_CSC_BVD1	0x01&lt;br /&gt;
-#define I365_CSC_STSCHG	0x01&lt;br /&gt;
-#define I365_CSC_BVD2	0x02&lt;br /&gt;
-#define I365_CSC_READY	0x04&lt;br /&gt;
-#define I365_CSC_DETECT	0x08&lt;br /&gt;
-#define I365_CSC_ANY	0x0F&lt;br /&gt;
-#define I365_CSC_GPI	0x10&lt;br /&gt;
+#define I365_CSC_BVD1		0x01&lt;br /&gt;
+#define I365_CSC_STSCHG		0x01&lt;br /&gt;
+#define I365_CSC_BVD2		0x02&lt;br /&gt;
+#define I365_CSC_READY		0x04&lt;br /&gt;
+#define I365_CSC_DETECT		0x08&lt;br /&gt;
+#define I365_CSC_ANY		0x0F&lt;br /&gt;
+#define I365_CSC_GPI		0x10&lt;br /&gt;
+#define I365_CSC_IRQ_MASK	0xF0&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_ADDRWIN */&lt;br /&gt;
 #define I365_ENA_IO(map)	(0x40 &amp;lt;&amp;lt; (map))&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/ti113x.h linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/ti113x.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h	2006-03-15 10:13:32.000000000 +0100&lt;br /&gt;
@@ -304,6 +304,18 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static int ti113x_init(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+        u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+&lt;br /&gt;
+        new = reg &amp;amp; ~I365_INTR_ENA;&lt;br /&gt;
+        if ( socket-&amp;gt;dev-&amp;gt;irq ) /* PCI IRQ */&lt;br /&gt;
+                new |= I365_INTR_ENA;&lt;br /&gt;
+        if (new != reg)&lt;br /&gt;
+                exca_writeb(socket, I365_INTCTL, new);&lt;br /&gt;
+        return 0;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
@@ -317,14 +329,42 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static void ti113x_use_isa_irq(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+	int isa_irq;&lt;br /&gt;
+	u8 intctl;&lt;br /&gt;
+	u32 isa_irq_mask;&lt;br /&gt;
+&lt;br /&gt;
+	/* get a free isa int */&lt;br /&gt;
+	isa_irq_mask = 0;&lt;br /&gt;
+        if (isa_probe)&lt;br /&gt;
+                isa_irq_mask = yenta_probe_irq(socket, 0x0ef8); /* 0x0ef8 =&amp;gt; only common isa irqs */&lt;br /&gt;
+	if ( !(isa_irq_mask &amp;amp; 0xFFFF) ) return; /* no useable isa irq found */&lt;br /&gt;
+	for(isa_irq = -1 ; isa_irq_mask ; isa_irq++ ) /* choose highest available */&lt;br /&gt;
+		isa_irq_mask &amp;gt;&amp;gt;= 1;&lt;br /&gt;
+&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, (isa_irq &amp;lt;&amp;lt; 4) );  /* CSC */&lt;br /&gt;
+&lt;br /&gt;
+	socket-&amp;gt;cb_irq = isa_irq;&lt;br /&gt;
+&lt;br /&gt;
+	intctl = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+	intctl &amp;amp;= ~(I365_INTR_ENA | I365_IRQ_MASK);	/* CSC Enable */&lt;br /&gt;
+	exca_writeb(socket, I365_INTCTL, intctl );&lt;br /&gt;
+&lt;br /&gt;
+        printk(KERN_INFO &amp;quot;Yenta TI113x: using isa irq %d\n&amp;quot;, isa_irq);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti113x_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 cardctl;&lt;br /&gt;
 &lt;br /&gt;
 	cardctl = config_readb(socket, TI113X_CARD_CONTROL);&lt;br /&gt;
 	cardctl &amp;amp;= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC);&lt;br /&gt;
-	if (socket-&amp;gt;cb_irq)&lt;br /&gt;
+	if (socket-&amp;gt;dev-&amp;gt;irq)&lt;br /&gt;
 		cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;&lt;br /&gt;
+	else&lt;br /&gt;
+		ti113x_use_isa_irq(socket);&lt;br /&gt;
+&lt;br /&gt;
 	config_writeb(socket, TI113X_CARD_CONTROL, cardctl);&lt;br /&gt;
 &lt;br /&gt;
 	return ti_override(socket);&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/yenta_socket.c linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/yenta_socket.c	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c	2006-03-12 01:05:34.000000000 +0100&lt;br /&gt;
@@ -50,7 +50,7 @@&lt;br /&gt;
 #define to_ns(cycles)	((cycles)*120)&lt;br /&gt;
 &lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket);&lt;br /&gt;
-&lt;br /&gt;
+static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask);&lt;br /&gt;
 &lt;br /&gt;
 static unsigned int override_bios;&lt;br /&gt;
 module_param(override_bios, uint, 0000);&lt;br /&gt;
@@ -379,9 +379,12 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* ISA interrupt control? */&lt;br /&gt;
 		intr = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
-		intr = (intr &amp;amp; ~0xf);&lt;br /&gt;
-		if (!socket-&amp;gt;cb_irq) {&lt;br /&gt;
-			intr |= state-&amp;gt;io_irq;&lt;br /&gt;
+		intr &amp;amp;= ~(I365_IRQ_MASK);&lt;br /&gt;
+		if (!socket-&amp;gt;dev-&amp;gt;irq) {  /* is there a valid pci irq ? */&lt;br /&gt;
+			if(socket-&amp;gt;cb_irq)&lt;br /&gt;
+				intr |= socket-&amp;gt;cb_irq;&lt;br /&gt;
+			else&lt;br /&gt;
+				intr |= socket-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
 		exca_writeb(socket, I365_INTCTL, intr);&lt;br /&gt;
@@ -391,7 +394,7 @@&lt;br /&gt;
 		reg = exca_readb(socket, I365_INTCTL) &amp;amp; (I365_RING_ENA | I365_INTR_ENA);&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_RESET) ? 0 : I365_PC_RESET;&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_IOCARD) ? I365_PC_IOCARD : 0;&lt;br /&gt;
-		if (state-&amp;gt;io_irq != socket-&amp;gt;cb_irq) {&lt;br /&gt;
+		if (state-&amp;gt;io_irq) {&lt;br /&gt;
 			reg |= state-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
@@ -404,8 +407,10 @@&lt;br /&gt;
 		if (exca_readb(socket, I365_POWER) != reg)&lt;br /&gt;
 			exca_writeb(socket, I365_POWER, reg);&lt;br /&gt;
 &lt;br /&gt;
-		/* CSC interrupt: no ISA irq for CSC */&lt;br /&gt;
-		reg = I365_CSC_DETECT;&lt;br /&gt;
+		reg = exca_readb(socket, I365_CSCINT);  /*keep isa IRQs for CSC*/&lt;br /&gt;
+		reg &amp;amp;= I365_CSC_IRQ_MASK;&lt;br /&gt;
+		reg |= I365_CSC_DETECT;&lt;br /&gt;
+&lt;br /&gt;
 		if (state-&amp;gt;flags &amp;amp; SS_IOCARD) {&lt;br /&gt;
 			if (state-&amp;gt;csc_mask &amp;amp; SS_STSCHG) reg |= I365_CSC_STSCHG;&lt;br /&gt;
 		} else {&lt;br /&gt;
@@ -868,7 +873,7 @@&lt;br /&gt;
 		.override	= ti113x_override,&lt;br /&gt;
 		.save_state	= ti_save_state,&lt;br /&gt;
 		.restore_state	= ti_restore_state,&lt;br /&gt;
-		.sock_init	= ti_init,&lt;br /&gt;
+		.sock_init	= ti113x_init,&lt;br /&gt;
 	},&lt;br /&gt;
 	[CARDBUS_TYPE_TI12XX]	= {&lt;br /&gt;
 		.override	= ti12xx_override,&lt;br /&gt;
@@ -922,6 +927,7 @@&lt;br /&gt;
 	int i;&lt;br /&gt;
 	unsigned long val;&lt;br /&gt;
 	u32 mask;&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * Probe for usable interrupts using the force&lt;br /&gt;
@@ -929,6 +935,7 @@&lt;br /&gt;
 	 */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
 	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
 	val = probe_irq_on() &amp;amp; isa_irq_mask;&lt;br /&gt;
 	for (i = 1; i &amp;lt; 16; i++) {&lt;br /&gt;
@@ -940,7 +947,7 @@&lt;br /&gt;
 		cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	}&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 &lt;br /&gt;
 	mask = probe_irq_mask(val) &amp;amp; 0xffff;&lt;br /&gt;
 &lt;br /&gt;
@@ -971,6 +978,8 @@&lt;br /&gt;
 /* probes the PCI interrupt, use only on override functions */&lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
+&lt;br /&gt;
 	if (!socket-&amp;gt;cb_irq)&lt;br /&gt;
 		return -1;&lt;br /&gt;
 &lt;br /&gt;
@@ -982,7 +991,9 @@&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/* generate interrupt, wait */&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);&lt;br /&gt;
+&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);&lt;br /&gt;
@@ -991,7 +1002,7 @@&lt;br /&gt;
 &lt;br /&gt;
 	/* disable interrupts */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	exca_readb(socket, I365_CSC);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is untested if these changes are not breaking other ti pcmcia bridges.&lt;br /&gt;
( Maybe someone can test this patch on other hardware.&lt;br /&gt;
And please review the changes, especially those in yenta_socket.c )&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24691</id>
		<title>760ed yenta patch</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=760ed_yenta_patch&amp;diff=24691"/>
		<updated>2006-09-17T12:59:38Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a kernel patch for a IBM Thinkpad 760ED notebook.&lt;br /&gt;
&lt;br /&gt;
The pci irq pin of the ti1130 pcmcia bridge is not connected.&lt;br /&gt;
To use the cardbus, the irq has to be routed to an isa irq.&lt;br /&gt;
This patch detects an valid irq and route cardbus interupts to isa instead &lt;br /&gt;
of pci. (If a valid pci irq is detected it should use it and not the isa irq.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/i82365.h linux-2.6.15.1-jck/drivers/pcmcia/i82365.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/i82365.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/i82365.h	2006-02-18 17:34:35.000000000 +0100&lt;br /&gt;
@@ -88,13 +88,14 @@&lt;br /&gt;
 #define I365_IRQ_MASK	0x0F&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_CSC and I365_CSCINT*/&lt;br /&gt;
-#define I365_CSC_BVD1	0x01&lt;br /&gt;
-#define I365_CSC_STSCHG	0x01&lt;br /&gt;
-#define I365_CSC_BVD2	0x02&lt;br /&gt;
-#define I365_CSC_READY	0x04&lt;br /&gt;
-#define I365_CSC_DETECT	0x08&lt;br /&gt;
-#define I365_CSC_ANY	0x0F&lt;br /&gt;
-#define I365_CSC_GPI	0x10&lt;br /&gt;
+#define I365_CSC_BVD1		0x01&lt;br /&gt;
+#define I365_CSC_STSCHG		0x01&lt;br /&gt;
+#define I365_CSC_BVD2		0x02&lt;br /&gt;
+#define I365_CSC_READY		0x04&lt;br /&gt;
+#define I365_CSC_DETECT		0x08&lt;br /&gt;
+#define I365_CSC_ANY		0x0F&lt;br /&gt;
+#define I365_CSC_GPI		0x10&lt;br /&gt;
+#define I365_CSC_IRQ_MASK	0xF0&lt;br /&gt;
 &lt;br /&gt;
 /* Flags for I365_ADDRWIN */&lt;br /&gt;
 #define I365_ENA_IO(map)	(0x40 &amp;lt;&amp;lt; (map))&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/ti113x.h linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/ti113x.h	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/ti113x.h	2006-03-15 10:13:32.000000000 +0100&lt;br /&gt;
@@ -304,6 +304,18 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static int ti113x_init(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+        u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+&lt;br /&gt;
+        new = reg &amp;amp; ~I365_INTR_ENA;&lt;br /&gt;
+        if ( socket-&amp;gt;dev-&amp;gt;irq ) /* PCI IRQ */&lt;br /&gt;
+                new |= I365_INTR_ENA;&lt;br /&gt;
+        if (new != reg)&lt;br /&gt;
+                exca_writeb(socket, I365_INTCTL, new);&lt;br /&gt;
+        return 0;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 new, reg = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
@@ -317,14 +329,42 @@&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+static void ti113x_use_isa_irq(struct yenta_socket *socket)&lt;br /&gt;
+{&lt;br /&gt;
+	int isa_irq;&lt;br /&gt;
+	u8 intctl;&lt;br /&gt;
+	u32 isa_irq_mask;&lt;br /&gt;
+&lt;br /&gt;
+	/* get a free isa int */&lt;br /&gt;
+	isa_irq_mask = 0;&lt;br /&gt;
+        if (isa_probe)&lt;br /&gt;
+                isa_irq_mask = yenta_probe_irq(socket, 0x0ef8); /* 0x0ef8 =&amp;gt; only common isa irqs */&lt;br /&gt;
+	if ( !(isa_irq_mask &amp;amp; 0xFFFF) ) return; /* no useable isa irq found */&lt;br /&gt;
+	for(isa_irq = -1 ; isa_irq_mask ; isa_irq++ ) /* choose highest available */&lt;br /&gt;
+		isa_irq_mask &amp;gt;&amp;gt;= 1;&lt;br /&gt;
+&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, (isa_irq &amp;lt;&amp;lt; 4) );  /* CSC */&lt;br /&gt;
+&lt;br /&gt;
+	socket-&amp;gt;cb_irq = isa_irq;&lt;br /&gt;
+&lt;br /&gt;
+	intctl = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
+	intctl &amp;amp;= ~(I365_INTR_ENA | I365_IRQ_MASK);	/* CSC Enable */&lt;br /&gt;
+	exca_writeb(socket, I365_INTCTL, intctl );&lt;br /&gt;
+&lt;br /&gt;
+        printk(KERN_INFO &amp;quot;Yenta TI113x: using isa irq %d\n&amp;quot;, isa_irq);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 static int ti113x_override(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
 	u8 cardctl;&lt;br /&gt;
 &lt;br /&gt;
 	cardctl = config_readb(socket, TI113X_CARD_CONTROL);&lt;br /&gt;
 	cardctl &amp;amp;= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC);&lt;br /&gt;
-	if (socket-&amp;gt;cb_irq)&lt;br /&gt;
+	if (socket-&amp;gt;dev-&amp;gt;irq)&lt;br /&gt;
 		cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;&lt;br /&gt;
+	else&lt;br /&gt;
+		ti113x_use_isa_irq(socket);&lt;br /&gt;
+&lt;br /&gt;
 	config_writeb(socket, TI113X_CARD_CONTROL, cardctl);&lt;br /&gt;
 &lt;br /&gt;
 	return ti_override(socket);&lt;br /&gt;
diff -u linux-2.6.15.1/drivers/pcmcia/yenta_socket.c linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c&lt;br /&gt;
--- linux-2.6.15.1/drivers/pcmcia/yenta_socket.c	2006-01-15 07:16:02.000000000 +0100&lt;br /&gt;
+++ linux-2.6.15.1-jck/drivers/pcmcia/yenta_socket.c	2006-03-12 01:05:34.000000000 +0100&lt;br /&gt;
@@ -50,7 +50,7 @@&lt;br /&gt;
 #define to_ns(cycles)	((cycles)*120)&lt;br /&gt;
 &lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket);&lt;br /&gt;
-&lt;br /&gt;
+static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask);&lt;br /&gt;
 &lt;br /&gt;
 static unsigned int override_bios;&lt;br /&gt;
 module_param(override_bios, uint, 0000);&lt;br /&gt;
@@ -379,9 +379,12 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* ISA interrupt control? */&lt;br /&gt;
 		intr = exca_readb(socket, I365_INTCTL);&lt;br /&gt;
-		intr = (intr &amp;amp; ~0xf);&lt;br /&gt;
-		if (!socket-&amp;gt;cb_irq) {&lt;br /&gt;
-			intr |= state-&amp;gt;io_irq;&lt;br /&gt;
+		intr &amp;amp;= ~(I365_IRQ_MASK);&lt;br /&gt;
+		if (!socket-&amp;gt;dev-&amp;gt;irq) {  /* is there a valid pci irq ? */&lt;br /&gt;
+			if(socket-&amp;gt;cb_irq)&lt;br /&gt;
+				intr |= socket-&amp;gt;cb_irq;&lt;br /&gt;
+			else&lt;br /&gt;
+				intr |= socket-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
 		exca_writeb(socket, I365_INTCTL, intr);&lt;br /&gt;
@@ -391,7 +394,7 @@&lt;br /&gt;
 		reg = exca_readb(socket, I365_INTCTL) &amp;amp; (I365_RING_ENA | I365_INTR_ENA);&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_RESET) ? 0 : I365_PC_RESET;&lt;br /&gt;
 		reg |= (state-&amp;gt;flags &amp;amp; SS_IOCARD) ? I365_PC_IOCARD : 0;&lt;br /&gt;
-		if (state-&amp;gt;io_irq != socket-&amp;gt;cb_irq) {&lt;br /&gt;
+		if (state-&amp;gt;io_irq) {&lt;br /&gt;
 			reg |= state-&amp;gt;io_irq;&lt;br /&gt;
 			bridge |= CB_BRIDGE_INTR;&lt;br /&gt;
 		}&lt;br /&gt;
@@ -404,8 +407,10 @@&lt;br /&gt;
 		if (exca_readb(socket, I365_POWER) != reg)&lt;br /&gt;
 			exca_writeb(socket, I365_POWER, reg);&lt;br /&gt;
 &lt;br /&gt;
-		/* CSC interrupt: no ISA irq for CSC */&lt;br /&gt;
-		reg = I365_CSC_DETECT;&lt;br /&gt;
+		reg = exca_readb(socket, I365_CSCINT);  /*keep isa IRQs for CSC*/&lt;br /&gt;
+		reg &amp;amp;= I365_CSC_IRQ_MASK;&lt;br /&gt;
+		reg |= I365_CSC_DETECT;&lt;br /&gt;
+&lt;br /&gt;
 		if (state-&amp;gt;flags &amp;amp; SS_IOCARD) {&lt;br /&gt;
 			if (state-&amp;gt;csc_mask &amp;amp; SS_STSCHG) reg |= I365_CSC_STSCHG;&lt;br /&gt;
 		} else {&lt;br /&gt;
@@ -868,7 +873,7 @@&lt;br /&gt;
 		.override	= ti113x_override,&lt;br /&gt;
 		.save_state	= ti_save_state,&lt;br /&gt;
 		.restore_state	= ti_restore_state,&lt;br /&gt;
-		.sock_init	= ti_init,&lt;br /&gt;
+		.sock_init	= ti113x_init,&lt;br /&gt;
 	},&lt;br /&gt;
 	[CARDBUS_TYPE_TI12XX]	= {&lt;br /&gt;
 		.override	= ti12xx_override,&lt;br /&gt;
@@ -922,6 +927,7 @@&lt;br /&gt;
 	int i;&lt;br /&gt;
 	unsigned long val;&lt;br /&gt;
 	u32 mask;&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * Probe for usable interrupts using the force&lt;br /&gt;
@@ -929,6 +935,7 @@&lt;br /&gt;
 	 */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
 	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
 	val = probe_irq_on() &amp;amp; isa_irq_mask;&lt;br /&gt;
 	for (i = 1; i &amp;lt; 16; i++) {&lt;br /&gt;
@@ -940,7 +947,7 @@&lt;br /&gt;
 		cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	}&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 &lt;br /&gt;
 	mask = probe_irq_mask(val) &amp;amp; 0xffff;&lt;br /&gt;
 &lt;br /&gt;
@@ -971,6 +978,8 @@&lt;br /&gt;
 /* probes the PCI interrupt, use only on override functions */&lt;br /&gt;
 static int yenta_probe_cb_irq(struct yenta_socket *socket)&lt;br /&gt;
 {&lt;br /&gt;
+	u8 reg;&lt;br /&gt;
+&lt;br /&gt;
 	if (!socket-&amp;gt;cb_irq)&lt;br /&gt;
 		return -1;&lt;br /&gt;
 &lt;br /&gt;
@@ -982,7 +991,9 @@&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/* generate interrupt, wait */&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);&lt;br /&gt;
+	reg = exca_readb(socket, I365_CSCINT); /* save */&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);&lt;br /&gt;
+&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);&lt;br /&gt;
@@ -991,7 +1002,7 @@&lt;br /&gt;
 &lt;br /&gt;
 	/* disable interrupts */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_MASK, 0);&lt;br /&gt;
-	exca_writeb(socket, I365_CSCINT, 0);&lt;br /&gt;
+	exca_writeb(socket, I365_CSCINT, reg); /* restore */&lt;br /&gt;
 	cb_writel(socket, CB_SOCKET_EVENT, -1);&lt;br /&gt;
 	exca_readb(socket, I365_CSC);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is untested if these changes are not breaking other ti pcmcia bridges.&lt;br /&gt;
( Maybe someone can test this patch on other hardware.&lt;br /&gt;
And please review the changes, especially those in yenta_socket.c )&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Category_talk:760ED&amp;diff=24382</id>
		<title>Category talk:760ED</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Category_talk:760ED&amp;diff=24382"/>
		<updated>2006-08-28T18:44:10Z</updated>

		<summary type="html">&lt;p&gt;Fpga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From the web messages cardbus does not work as no IRQ can be mapped. This is a physical problem because the wires for INTx is not connected. Linux will report IRQ 0 and tell you to use biosirq but it does not help. Only non-cardbus devices work. It is nice if someone can tell us how to fix it?&lt;br /&gt;
&lt;br /&gt;
The Cardbus of the 760ED is working fine if you patch the kernel to route IRQ to a pci interupt.&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Installation_instructions_for_the_ThinkPad_760&amp;diff=20951</id>
		<title>Installation instructions for the ThinkPad 760</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Installation_instructions_for_the_ThinkPad_760&amp;diff=20951"/>
		<updated>2006-03-17T21:45:30Z</updated>

		<summary type="html">&lt;p&gt;Fpga: /* ThinkPad 760ED */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Specific installation notes for the ThinkPad {{760C}}, {{760CD}}, {{760E}}, {{760ED}}, {{760EL}}, {{760ELD}}, {{760L}}, {{760LD}}, {{760XD}} and {{760XL}}.&lt;br /&gt;
&lt;br /&gt;
==General Notes==&lt;br /&gt;
One of the main pitfalls to installing Linux on this ThinkPad line is the lack of bootable CD-ROM support.  Though it is possible to install using a set of startup floppies, being sure to get one for PCMCIA support and another for network drivers, it tends to be more of a headache than it is worth.  Using a utility like sbootmgr (available from the Slackware server [ftp://ftp.slackware.com/pub/slackware/slackware-current/isolinux/sbootmgr here], the [http://btmgr.webframe.org/ homepage] of the software is curiously out-of-date) makes this headache virtually disappear.  Simply write the image to a floppy drive, and boot up.  Highlight the hard disk in the Main Boot menu screen that appears. Then hit Tab to enter the Main Menu, head down to System Settings, press Enter, select Install Smart BootManager, and answer Y.  Turn your computer off, swap the CD-ROM into it, insert the Linux distro of your choice, and boot up.  Smart BootManager will start up, and you'll need to head back into the System Settings menu and Rescan All Partitions to add the new bootable CD-ROM to sbootmgr's list.  After you've done this, your CD-ROM will be in the menu, which you can then boot from, by highlighting it, heading back into the menu, and selecting &amp;quot;Boot It.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Granted, a CD-ROM was an option on some of the models in this line, so if you don't have one, you'll either have to get one from eBay (about $20) or fall back on using a network install.&lt;br /&gt;
&lt;br /&gt;
==Distro specific Instructions==&lt;br /&gt;
&lt;br /&gt;
==External Sources==&lt;br /&gt;
===ThinkPad 760E===&lt;br /&gt;
*[http://www.geocities.com/SiliconValley/9111/ibmtp760/index.html Slackware 4.0 on a ThinkPad 760E]&lt;br /&gt;
&lt;br /&gt;
===ThinkPad 760ED===&lt;br /&gt;
*[http://www.qsl.net/n0nb/linux/tp760ed.html Nate Bargmann's Debian on a ThinkPad 760ED page]&lt;br /&gt;
*[http://web.archive.org/web/20040604223902/http://www.eecs.lehigh.edu/~tboult/linux/thinkpad760ed.html Red Hat 4.2 on a ThinkPad 760ED/760XD]&lt;br /&gt;
*[http://lists.infradead.org/pipermail/linux-pcmcia/2006-March/003347.html PCMCIA Patch for Kernel 2.6.15.1]&lt;br /&gt;
&lt;br /&gt;
===ThinkPad 760EL===&lt;br /&gt;
*[http://www.geocities.com/SiliconValley/9111/ibmtp760/thinkpad.html Harald Milz's Linux on a ThinkPad 760EL page]&lt;br /&gt;
*[http://patter.mine.nu/thinkpad.html Debian on a ThinkPad 760EL]&lt;br /&gt;
*[http://personal.riverusers.com/~thegrendel/laptop.html Mandrake 6.1 on a ThinkPad 760EL]&lt;br /&gt;
*[http://www.btinternet.com/~zeltanet/zeltanet/thinkpad760el_linux.htm Mandrake 7.0 on a ThinkPad 760EL]&lt;br /&gt;
*[http://www.geocities.com/dueze/thinkpad760el.html Slackware 7.1 on a ThinkPad 760EL]&lt;br /&gt;
*[http://stephe_2.tripod.com/thinkpad/ Stephe's Red Hat 7.0 on a ThinkPad 760EL page]&lt;br /&gt;
&lt;br /&gt;
===ThinkPad 760XL===&lt;br /&gt;
*[http://www.grnet.com/sc/linux/tp760xl/ Mike Mol's Debian Woody on a ThinkPad 760XL page]&lt;br /&gt;
*[http://www.monkeynoodle.org/comp/hardware/760xl.html Red Hat 5.2 on a ThinkPad 760XL]&lt;/div&gt;</summary>
		<author><name>Fpga</name></author>
		
	</entry>
</feed>