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]

 



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.

Regards
-
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