Re: [PATCH 6/12] ARM: OMAP1: Use MMC multislot structures for Siemens SX1 board

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

----- Original message -----
> On 18/12/2007, Tony Lindgren <tony@xxxxxxxxxxx> wrote:
> > From: Carlos Eduardo Aguiar <carlos.aguiar@xxxxxxxxxxx>
> >
> > Use MMC multislot structures for Siemens SX1 board
> >
> > Signed-off-by: Carlos Eduardo Aguiar <carlos.aguiar@xxxxxxxxxxx>
> > Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>
> > ---
> >  arch/arm/mach-omap1/Makefile          |    2 +-
> >  arch/arm/mach-omap1/board-sx1-mmc.c  |  124 +++++++++++++++++++++++++++++++++
> >  arch/arm/mach-omap1/board-sx1.c      |  17 +----
> >  include/asm-arm/arch-omap/board-sx1.h |    9 ++-
> >  4 files changed, 135 insertions(+), 17 deletions(-)
> >  create mode 100644 arch/arm/mach-omap1/board-sx1-mmc.c
> >
> > diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile
> > index 416a778..015a66b 100644
> > --- a/arch/arm/mach-omap1/Makefile
> > +++ b/arch/arm/mach-omap1/Makefile
> > @@ -26,7 +26,7 @@ obj-$(CONFIG_MACH_OMAP_PALMZ71)              +=
> > board-palmz71.o  obj-$(CONFIG_MACH_OMAP_PALMTT)        += board-palmtt.o
> >  obj-$(CONFIG_MACH_NOKIA770)            += board-nokia770.o
> >  obj-$(CONFIG_MACH_AMS_DELTA)          += board-ams-delta.o
> > -obj-$(CONFIG_MACH_SX1)                += board-sx1.o
> > +obj-$(CONFIG_MACH_SX1)                += board-sx1.o board-sx1-mmc.o
> >
> >  ifeq ($(CONFIG_ARCH_OMAP15XX),y)
> >  # Innovator-1510 FPGA
> > diff --git a/arch/arm/mach-omap1/board-sx1-mmc.c
> > b/arch/arm/mach-omap1/board-sx1-mmc.c new file mode 100644
> > index 0000000..45c2fbb
> > --- /dev/null
> > +++ b/arch/arm/mach-omap1/board-sx1-mmc.c
> > @@ -0,0 +1,124 @@
> > +/*
> > + * linux/arch/arm/mach-omap1/board-sx1-mmc.c
> > + *
> > + * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT
> > + * Author: Carlos Eduardo Aguiar <carlos.aguiar@xxxxxxxxxxx>
> > + *
> > + * This code is based on linux/arch/arm/mach-omap1/board-h2-mmc.c, which is:
> > + * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +
> > +#include <asm/arch/hardware.h>
> > +#include <asm/arch/mmc.h>
> > +#include <asm/arch/gpio.h>
> > +
> > +#ifdef CONFIG_MMC_OMAP
> > +static int slot_cover_open;
> > +static struct device *mmc_device;
> > +
> > +static int sx1_mmc_set_power(struct device *dev, int slot, int power_on,
> > +                              int vdd)
> > +{
> > +      int err;
> > +      u8 dat = 0;
> > +
> > +#ifdef CONFIG_MMC_DEBUG
> > +      dev_dbg(dev, "Set slot %d power: %s (vdd %d)\n", slot + 1,
> > +              power_on ? "on" : "off", vdd);
> > +#endif
> > +
> > +      if (slot != 0) {
> > +              dev_err(dev, "No such slot %d\n", slot + 1);
> > +              return -ENODEV;
> > +      }
> > +
> > +      err = i2c_read_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, &dat);
> > +      if (err < 0)
> > +              return err;
> > +
> > +      if (power_on)
> > +              dat |= SOFIA_MMC_POWER;
> > +      else
> > +              dat &= ~SOFIA_MMC_POWER;
> > +
> > +      return i2c_write_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, dat);
> > +}
> > +
> > +static int sx1_mmc_set_bus_mode(struct device *dev, int slot, int bus_mode)
> > +{
> > +#ifdef CONFIG_MMC_DEBUG
> > +      dev_dbg(dev, "Set slot %d bus_mode %s\n", slot + 1,
> > +              bus_mode == MMC_BUSMODE_OPENDRAIN ? "open-drain" :
> > "push-pull"); +#endif
> > +      if (slot != 0) {
> > +              dev_err(dev, "No such slot %d\n", slot + 1);
> > +              return -ENODEV;
> > +      }
> > +
> > +      return 0;
> > +}
> > +
> > +static int sx1_mmc_get_cover_state(struct device *dev, int slot)
> > +{
> > +      BUG_ON(slot != 0);
> > +
> > +      return slot_cover_open;
> > +}
> > +
> > +void sx1_mmc_slot_cover_handler(void *arg, int state)
> > +{
> > +      if (mmc_device == NULL)
> > +              return;
> > +
> > +      slot_cover_open = state;
> > +      omap_mmc_notify_cover_event(mmc_device, 0, state);
> > +}
> > +
> > +static int sx1_mmc_late_init(struct device *dev)
> > +{
> > +      int ret = 0;
> > +
> > +      mmc_device = dev;
> > +
> > +      return ret;
> > +}
> > +
> > +static void sx1_mmc_cleanup(struct device *dev)
> > +{
> > +}
> > +
> > +static struct omap_mmc_platform_data sx1_mmc_data = {
> > +      .nr_slots                      = 1,
> > +      .switch_slot                    = NULL,
> > +      .init                          = sx1_mmc_late_init,
> > +      .cleanup                        = sx1_mmc_cleanup,
> > +      .slots[0]      = {
> > +              .set_power              = sx1_mmc_set_power,
> > +              .set_bus_mode          = sx1_mmc_set_bus_mode,
> > +              .get_ro                = NULL,
> > +              .get_cover_state        = sx1_mmc_get_cover_state,
> > +              .ocr_mask              = MMC_VDD_28_29 | MMC_VDD_30_31 |
> > +                                        MMC_VDD_32_33 | MMC_VDD_33_34,
> > +              .name                  = "mmcblk",
> > +      },
> > +};
> > +
> > +void __init sx1_mmc_init(void)
> > +{
> > +      omap_set_mmc_info(1, &sx1_mmc_data);
> > +}
> > +
> > +#else
> > +
> > +void __init sx1_mmc_init(void)
> > +{
> > +}
> > +
> > +void sx1_mmc_slot_cover_handler(void *arg, int state)
> > +{
> > +}
> > +#endif
> > diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c
> > index 2743d63..44c7baa 100644
> > --- a/arch/arm/mach-omap1/board-sx1.c
> > +++ b/arch/arm/mach-omap1/board-sx1.c
> > @@ -134,20 +134,7 @@ int sx1_setmmipower(u8 onoff)
> >                dat &= ~SOFIA_MMILIGHT_POWER;
> >        return i2c_write_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, dat);
> >  }
> > -/* set MMC power on/off */
> > -int sx1_setmmcpower(u8 onoff)
> > -{
> > -      int err;
> > -      u8 dat = 0;
> > -      err = i2c_read_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, &dat);
> > -      if (err < 0)
> > -              return err;
> > -      if (onoff)
> > -              dat |= SOFIA_MMC_POWER;
> > -      else
> > -              dat &= ~SOFIA_MMC_POWER;
> > -      return i2c_write_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, dat);
> > -}
> > +
> >  /* set USB power on/off */
> >  int sx1_setusbpower(u8 onoff)
> >  {
> > @@ -168,7 +155,6 @@ EXPORT_SYMBOL(sx1_getkeylight);
> >  EXPORT_SYMBOL(sx1_setbacklight);
> >  EXPORT_SYMBOL(sx1_getbacklight);
> >  EXPORT_SYMBOL(sx1_setmmipower);
> > -EXPORT_SYMBOL(sx1_setmmcpower);
> >  EXPORT_SYMBOL(sx1_setusbpower);
> >
> >  /*----------- Keypad -------------------------*/
> > @@ -454,6 +440,7 @@ static void __init omap_sx1_init(void)
> >        omap_board_config = sx1_config;
> >        omap_board_config_size = ARRAY_SIZE(sx1_config);
> >        omap_serial_init();
> > +      sx1_mmc_init();
> >
> >        /* turn on USB power */
> >        /* sx1_setusbpower(1); cant do it here because i2c is not ready */
> > diff --git a/include/asm-arm/arch-omap/board-sx1.h
> > b/include/asm-arm/arch-omap/board-sx1.h index 2bb8dd6..7773c26 100644
> > --- a/include/asm-arm/arch-omap/board-sx1.h
> > +++ b/include/asm-arm/arch-omap/board-sx1.h
> > @@ -41,6 +41,13 @@ int sx1_getkeylight(u8 *keylight);
> >
> >  int sx1_setmmipower(u8 onoff);
> >  int sx1_setusbpower(u8 onoff);
> > -int sx1_setmmcpower(u8 onoff);
> > +
> > +int i2c_write_byte(u8 devaddr, u8 regoffset, u8 value);
> > +int i2c_read_byte(u8 devaddr, u8 regoffset, u8 * value);
>
> I don't think RMK will like these functions here. I think they should
> either be put in some generic i2c driver or renamed so that they don't
> conflict with generic stuff.
>
> Also it seems there aren't any i2c_put_adapter calls corresponding to
> the i2c_get_adapter.

Right, that should not be there. I merged
several of the multislot fix patches into
this patch and it somehow slipped in.

I'm currently travelling with spotty net
access, so I'll post updates to this patch
(and possibly other patches) beginning of
the year when I have better access.

Regards,

Tony  

-
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

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux