* David Brownell <david-b@xxxxxxxxxxx> [081124 10:29]: > From: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx> > > Update board-h3.c to use standard GPIO calls to set up the > IRDA transceiver, not legacy OMAP-only gpioexpander code. > > Also, move the #include <.../ov9640.h>; the header is gone, > there's currently no driver for that camera sensor. > > Signed-off-by: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx> > --- > COMPILE TESTED ONLY ... but obviously, nobody's built this > board in a while, or the ov9640 header would have been seen. Great, pushing to l-o tree. It's OK for us to decimate any code that's not being maintained. Especially if it's not in mainline tree ;) Tony > arch/arm/mach-omap1/board-h3.c | 112 ++++++++++++++++++++++++--------------- > 1 file changed, 69 insertions(+), 43 deletions(-) > > --- a/arch/arm/mach-omap1/board-h3.c > +++ b/arch/arm/mach-omap1/board-h3.c > @@ -26,8 +26,11 @@ > #include <linux/mtd/nand.h> > #include <linux/mtd/partitions.h> > #include <linux/input.h> > -#include <linux/i2c/tps65010.h> > #include <linux/clk.h> > + > +#include <linux/i2c/tps65010.h> > +#include <linux/i2c/pcf857x.h> > + > #include <linux/spi/spi.h> > #include <linux/spi/tsc210x.h> > > @@ -45,7 +48,6 @@ > > #include <mach/gpio.h> > #include <mach/gpio-switch.h> > -#include <mach/gpioexpander.h> > #include <mach/irqs.h> > #include <mach/mux.h> > #include <mach/tc.h> > @@ -58,8 +60,6 @@ > #include <mach/mcbsp.h> > #include <mach/omap-alsa.h> > > -#include <../drivers/media/video/ov9640.h> > - > #define H3_TS_GPIO 48 > > static int h3_keymap[] = { > @@ -284,29 +284,15 @@ static struct platform_device h3_kp_devi > > /* Select between the IrDA and aGPS module > */ > -static int h3_select_irda(struct device *dev, int state) > -{ > - unsigned char expa; > - int err = 0; > > - if ((err = read_gpio_expa(&expa, 0x26))) { > - printk(KERN_ERR "Error reading from I/O EXPANDER \n"); > - return err; > - } > +static int gpio_irda_enable; > +static int gpio_irda_x; > +static int gpio_irda_fir; > > - /* 'P6' enable/disable IRDA_TX and IRDA_RX */ > - if (state & IR_SEL) { /* IrDA */ > - if ((err = write_gpio_expa(expa | 0x40, 0x26))) { > - printk(KERN_ERR "Error writing to I/O EXPANDER \n"); > - return err; > - } > - } else { > - if ((err = write_gpio_expa(expa & ~0x40, 0x26))) { > - printk(KERN_ERR "Error writing to I/O EXPANDER \n"); > - return err; > - } > - } > - return err; > +static int h3_select_irda(struct device *dev, int state) > +{ > + gpio_set_value_cansleep(gpio_irda_enable, state & IR_SEL); > + return 0; > } > > static void set_trans_mode(struct work_struct *work) > @@ -314,24 +300,9 @@ static void set_trans_mode(struct work_s > struct omap_irda_config *irda_config = > container_of(work, struct omap_irda_config, gpio_expa.work); > int mode = irda_config->mode; > - unsigned char expa; > - int err = 0; > - > - if ((err = read_gpio_expa(&expa, 0x27)) != 0) { > - printk(KERN_ERR "Error reading from I/O expander\n"); > - } > > - expa &= ~0x03; > - > - if (mode & IR_SIRMODE) { > - expa |= 0x01; > - } else { /* MIR/FIR */ > - expa |= 0x03; > - } > - > - if ((err = write_gpio_expa(expa, 0x27)) != 0) { > - printk(KERN_ERR "Error writing to I/O expander\n"); > - } > + gpio_set_value_cansleep(gpio_irda_x, 1); > + gpio_set_value_cansleep(gpio_irda_fir, !(mode & IR_SIRMODE)); > } > > static int h3_transceiver_mode(struct device *dev, int mode) > @@ -441,7 +412,6 @@ static struct platform_device *devices[] > &nand_device, > &smc91x_device, > &intlat_device, > - &h3_irda_device, > &h3_kp_device, > &h3_lcd_device, > &h3_mcbsp1_device, > @@ -483,6 +453,9 @@ static int nand_dev_ready(struct omap_na > } > > #if defined(CONFIG_VIDEO_OV9640) || defined(CONFIG_VIDEO_OV9640_MODULE) > + > +#include <../drivers/media/video/ov9640.h> > + > /* > * Common OV9640 register initialization for all image sizes, pixel formats, > * and frame rates > @@ -576,8 +549,61 @@ static struct ov9640_platform_data h3_ov > }; > #endif > > +static int h3_pcf_setup(struct i2c_client *client, int gpio, > + unsigned ngpio, void *context) > +{ > + int status; > + > + /* REVISIT someone with schematics should look up the rest > + * of these signals, and configure them appropriately ... > + * camera and audio seem to be involved, too. > + */ > + > + /* P0 - ? */ > + gpio_irda_x = gpio + 0; > + status = gpio_request(gpio_irda_x, "irda_x"); > + if (status < 0) > + goto done; > + status = gpio_direction_output(gpio_irda_x, 0); > + if (status < 0) > + goto done; > + > + /* P1 - set if MIR/FIR */ > + gpio_irda_fir = gpio + 1; > + status = gpio_request(gpio_irda_fir, "irda_fir"); > + if (status < 0) > + goto done; > + status = gpio_direction_output(gpio_irda_fir, 0); > + if (status < 0) > + goto done; > + > + /* 'P6' enable/disable IRDA_TX and IRDA_RX ... default, off */ > + gpio_irda_enable = gpio + 6; > + status = gpio_request(gpio_irda_enable, "irda_enable"); > + if (status < 0) > + goto done; > + status = gpio_direction_output(gpio_irda_enable, 0); > + if (status < 0) > + goto done; > + > + /* register the IRDA device now that it can be operated */ > + status = platform_device_register(&h3_irda_device); > + > +done: > + return status; > +} > + > +static struct pcf857x_platform_data h3_pcf_data = { > + /* assign these GPIO numbers right after the MPUIO lines */ > + .gpio_base = OMAP_MAX_GPIO_LINES + 16, > + .setup = h3_pcf_setup, > +}; > + > static struct i2c_board_info __initdata h3_i2c_board_info[] = { > { > + I2C_BOARD_INFO("pcf8574", 0x27), > + .platform_data = &h3_pcf_data, > + }, { > I2C_BOARD_INFO("tps65013", 0x48), > /* .irq = OMAP_GPIO_IRQ(??), */ > }, > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html