PERFORCE change 110050 for review

Sam Leffler sam at FreeBSD.org
Wed Nov 15 19:27:00 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=110050

Change 110050 by sam at sam_ebb on 2006/11/15 19:26:39

	o change to using bit set/clr-style macros; this is more
	  clear to me and closer to what's used on other platforms
	  (which simplifies comparison)
	o correct initialization
	
	The bit operations now match linux but our bb'ing transfer
	method appears to be wrong.

Affected files ...

.. //depot/projects/arm/src/sys/arm/xscale/ixp425/ixp425_iic.c#3 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/xscale/ixp425/ixp425_iic.c#3 (text+ko) ====

@@ -51,6 +51,12 @@
 
 #define I2C_DELAY	10
 
+/* bit clr/set shorthands */
+#define	GPIO_CONF_CLR(sc, reg, mask)	\
+	GPIO_CONF_WRITE_4(sc, reg, GPIO_CONF_READ_4(sc, reg) &~ (mask))
+#define	GPIO_CONF_SET(sc, reg, mask)	\
+	GPIO_CONF_WRITE_4(sc, reg, GPIO_CONF_READ_4(sc, reg) | (mask))
+
 struct ixpiic_softc {
 	device_t		sc_dev;
 	bus_space_tag_t		sc_iot;
@@ -71,8 +77,6 @@
 static int
 ixpiic_attach(device_t dev)
 {
-	uint32_t reg;
-
 	struct ixpiic_softc *sc = device_get_softc(dev);
 	struct ixp425_softc *sa = device_get_softc(device_get_parent(dev));
 
@@ -82,15 +86,11 @@
 	sc->sc_iot = sa->sc_iot;
 	sc->sc_gpio_ioh = sa->sc_gpio_ioh;
 
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOUTR);
-	reg |= GPIO_I2C_SDA_BIT | GPIO_I2C_SCL_BIT;
-	GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOUTR, reg);
+	GPIO_CONF_SET(sc, IXP425_GPIO_GPOER,
+		GPIO_I2C_SCL_BIT | GPIO_I2C_SDA_BIT);
+	GPIO_CONF_CLR(sc, IXP425_GPIO_GPOUTR,
+		GPIO_I2C_SCL_BIT | GPIO_I2C_SDA_BIT);
 
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOER);
-	reg &= ~GPIO_I2C_SCL_BIT;
-	reg |= GPIO_I2C_SDA_BIT;
-	GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOER, reg);
-
 	/* add generic bit-banging code */	
 	if ((sc->iicbb = device_add_child(dev, "iicbb", -1)) == NULL)
 		device_printf(dev, "could not add iicbb\n");
@@ -99,7 +99,6 @@
 	device_probe_and_attach(sc->iicbb);
 
 	return (0);
-
 }
 
 static int
@@ -114,9 +113,7 @@
 	struct ixpiic_softc *sc = ixpiic_sc;
 	uint32_t reg;
 
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOER);
-	reg |= GPIO_I2C_SCL_BIT;
-	GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOER, reg);
+	GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SCL_BIT);
 
 	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPINR);
 	return (reg & GPIO_I2C_SCL_BIT);
@@ -128,9 +125,7 @@
 	struct ixpiic_softc *sc = ixpiic_sc;
 	uint32_t reg;
 
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOER);
-	reg |= GPIO_I2C_SDA_BIT;
-	GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOER, reg);
+	GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SDA_BIT);
 
 	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPINR);
 	return (reg & GPIO_I2C_SDA_BIT);
@@ -140,20 +135,12 @@
 ixpiic_setsda(device_t dev, char val)
 {
 	struct ixpiic_softc *sc = ixpiic_sc;
-	uint32_t reg;
 
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOUTR);
-        reg &= ~GPIO_I2C_SDA_BIT;
-        GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOUTR, reg);
-
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOER);
-
+	GPIO_CONF_CLR(sc, IXP425_GPIO_GPOUTR, GPIO_I2C_SDA_BIT);
 	if (val)
-		reg |= GPIO_I2C_SDA_BIT;
+		GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SDA_BIT);
 	else
-		reg &= ~GPIO_I2C_SDA_BIT;
-
-	GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOER, reg);
+		GPIO_CONF_CLR(sc, IXP425_GPIO_GPOER, GPIO_I2C_SDA_BIT);
 	DELAY(I2C_DELAY);
 }
 
@@ -161,20 +148,12 @@
 ixpiic_setscl(device_t dev, char val)
 {
 	struct ixpiic_softc *sc = ixpiic_sc;
-	uint32_t reg;
 
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOUTR);
-        reg &= ~GPIO_I2C_SCL_BIT;
-        GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOUTR, reg);
-
-	reg = GPIO_CONF_READ_4(sc, IXP425_GPIO_GPOER);
-
+	GPIO_CONF_CLR(sc, IXP425_GPIO_GPOUTR, GPIO_I2C_SCL_BIT);
 	if (val)
-		reg |= GPIO_I2C_SCL_BIT;
+		GPIO_CONF_SET(sc, IXP425_GPIO_GPOER, GPIO_I2C_SCL_BIT);
 	else
-		reg &= ~GPIO_I2C_SCL_BIT;
-
-	GPIO_CONF_WRITE_4(sc, IXP425_GPIO_GPOER, reg);
+		GPIO_CONF_CLR(sc, IXP425_GPIO_GPOER, GPIO_I2C_SCL_BIT);
 	DELAY(I2C_DELAY);
 }
 


More information about the p4-projects mailing list