Re: [PATCH v3 1/2] i2c: s3c2410: Keep a copy of platform data and use it

2011-09-13 Thread Stephen Boyd
On 9/12/2011 9:16 PM, Thomas Abraham wrote:
 @@ -809,6 +810,15 @@ static int s3c24xx_i2c_probe(struct platform_device 
 *pdev)
   return -ENOMEM;
   }
  
 + i2c-pdata = devm_kzalloc(pdev-dev, sizeof(*pdata), GFP_KERNEL);
 + if (!i2c-pdata) {
 + ret = -ENOMEM;
 + goto err_noclk;
 + }
 +
 + if (pdata)
 + memcpy(i2c-pdata, pdata, sizeof(*pdata));
 +

Is there a devm_kmemdup()? If not, maybe it would be a good idea to add it.

-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 0/2] Add device tree support for Samsung's keypad controller driver

2011-09-13 Thread Thomas Abraham
Changes since v1:
- Addressed comments from Dmitry Torokhov.
  - Type of controller is cached in driver's private data and the function
that determines the type of the controller for each keypad scan is
removed.
  - pdata allocated during probe is explicitly freed after probe completes
without any error. In case of exit from probe due a error, no explicit
deallocation of pdata memory is performed and it is left to devres to
handle that.
  - The generic code to translate KEY(x,y,code) is retained in the driver
itself. I am unsure of a right common place for it.
  - Driver continues with the probe even if one or more gpio configuration
fails.
  - Patch 1 that adds a new config option is still retained in this patchset.


This patchset adds device tree support for samsung's keypad controller driver.
First patch adds a new config option to be used by device tree enabled platforms
for selecting the samsung's keypad controller driver. The second patch adds 
device
tree support for the keypad driver.

Thomas Abraham (2):
  input: samsung-keypad: Add HAVE_SAMSUNG_KEYPAD config option
  input: samsung-keypad: Add device tree support

 .../devicetree/bindings/input/samsung-keypad.txt   |   88 ++
 drivers/input/keyboard/Kconfig |9 +-
 drivers/input/keyboard/samsung-keypad.c|  177 ++--
 3 files changed, 261 insertions(+), 13 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/input/samsung-keypad.txt

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] input: samsung-keypad: Add HAVE_SAMSUNG_KEYPAD config option

2011-09-13 Thread Thomas Abraham
For platforms using device tree, the static keypad device instances
are not required and SAMSUNG_DEV_KEYPAD is not selected. Since,
samsung keypad driver has dependency on SAMSUNG_DEV_KEYPAD config
option, the driver is left out of the compilation for dt enabled
platforms.

An additional config option 'HAVE_SAMSUNG_KEYPAD' is added
which the device tree based platforms can select. This config
option is added as an alternative dependency for keypad driver.

Signed-off-by: Thomas Abraham thomas.abra...@linaro.org
---
 drivers/input/keyboard/Kconfig |9 -
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index b4dee9d..7c322a3 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -423,9 +423,16 @@ config KEYBOARD_PMIC8XXX
  To compile this driver as a module, choose M here: the module will
  be called pmic8xxx-keypad.
 
+config HAVE_SAMSUNG_KEYPAD
+   bool
+   help
+ This will include Samsung Keypad controller driver support. If you
+ want to include Samsung Keypad support for any machine, kindly
+ select this in the respective mach-/Kconfig file.
+
 config KEYBOARD_SAMSUNG
tristate Samsung keypad support
-   depends on SAMSUNG_DEV_KEYPAD
+   depends on SAMSUNG_DEV_KEYPAD || HAVE_SAMSUNG_KEYPAD
help
  Say Y here if you want to use the Samsung keypad.
 
-- 
1.6.6.rc2

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] input: samsung-keypad: Add device tree support

2011-09-13 Thread Thomas Abraham
Add device tree based discovery support for Samsung's keypad controller.

Cc: Joonyoung Shim jy0922.s...@samsung.com
Cc: Donghwa Lee dh09@samsung.com
Signed-off-by: Thomas Abraham thomas.abra...@linaro.org
---
 .../devicetree/bindings/input/samsung-keypad.txt   |   88 ++
 drivers/input/keyboard/samsung-keypad.c|  177 ++--
 2 files changed, 253 insertions(+), 12 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/input/samsung-keypad.txt

diff --git a/Documentation/devicetree/bindings/input/samsung-keypad.txt 
b/Documentation/devicetree/bindings/input/samsung-keypad.txt
new file mode 100644
index 000..e1c7237
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/samsung-keypad.txt
@@ -0,0 +1,88 @@
+* Samsung's Keypad Controller device tree bindings
+
+Samsung's Keypad controller is used to interface a SoC with a matrix-type
+keypad device. The keypad controller supports multiple row and column lines.
+A key can be placed at each intersection of a unique row and a unique column.
+The keypad controller can sense a key-press and key-release and report the
+event using a interrupt to the cpu.
+
+Required SoC Specific Properties:
+- compatible: should be one of the following
+  - samsung,s3c6410-keypad: For controllers compatible with s3c6410 keypad
+controller.
+  - samsung,s5pv210-keypad: For controllers compatible with s5pv210 keypad
+controller.
+
+- reg: physical base address of the controller and length of memory mapped
+  region.
+
+- interrupts: The interrupt number to the cpu.
+
+Required Board Specific Properties:
+- samsung,keypad-num-rows: Number of row lines connected to the keypad
+  controller.
+
+- samsung,keypad-num-columns: Number of column lines connected to the
+  keypad controller.
+
+- row-gpios: List of gpios used as row lines. The gpio specifier for
+  this property depends on the gpio controller to which these row lines
+  are connected.
+
+- col-gpios: List of gpios used as column lines. The gpio specifier for
+  this property depends on the gpio controller to which these column
+  lines are connected.
+
+- Keys represented as child nodes: Each key connected to the keypad
+  controller is represented as a child node to the keypad controller
+  device node and should include the following properties.
+  - keypad,row: the row number to which the key is connected.
+  - keypad,column: the column number to which the key is connected.
+  - keypad,key-code: the key-code to be reported when the key is pressed
+and released.
+
+Optional Properties specific to linux:
+- linux,keypad-no-autorepeat: do no enable autorepeat feature.
+- linux,keypad-wakeup: use any event on keypad as wakeup event.
+
+
+Example:
+   keypad@100A {
+   compatible = samsung,s5pv210-keypad;
+   reg = 0x100A 0x100;
+   interrupts = 173;
+   samsung,keypad-num-rows = 2;
+   samsung,keypad-num-columns = 8;
+   linux,input-no-autorepeat;
+   linux,input-wakeup;
+
+   row-gpios = gpx2 0 3 3 0
+gpx2 1 3 3 0;
+
+   col-gpios = gpx1 0 3 0 0
+gpx1 1 3 0 0
+gpx1 2 3 0 0
+gpx1 3 3 0 0
+gpx1 4 3 0 0
+gpx1 5 3 0 0
+gpx1 6 3 0 0
+gpx1 7 3 0 0;
+
+   key_1 {
+   keypad,row = 0;
+   keypad,column = 3;
+   keypad,key-code = 2;
+   };
+
+   key_2 {
+   keypad,row = 0;
+   keypad,column = 4;
+   keypad,key-code = 3;
+   };
+
+   key_3 {
+   keypad,row = 0;
+   keypad,column = 5;
+   keypad,key-code = 4;
+   };
+   };
diff --git a/drivers/input/keyboard/samsung-keypad.c 
b/drivers/input/keyboard/samsung-keypad.c
index f689f49..cf01a56 100644
--- a/drivers/input/keyboard/samsung-keypad.c
+++ b/drivers/input/keyboard/samsung-keypad.c
@@ -21,6 +21,8 @@
 #include linux/module.h
 #include linux/platform_device.h
 #include linux/slab.h
+#include linux/of.h
+#include linux/of_gpio.h
 #include linux/sched.h
 #include plat/keypad.h
 
@@ -68,31 +70,26 @@ struct samsung_keypad {
wait_queue_head_t wait;
bool stopped;
int irq;
+   enum samsung_keypad_type type;
unsigned int row_shift;
unsigned int rows;
unsigned int cols;
unsigned int row_state[SAMSUNG_MAX_COLS];
+#ifdef CONFIG_OF
+   int row_gpios[SAMSUNG_MAX_ROWS];
+   int col_gpios[SAMSUNG_MAX_COLS];
+#endif
unsigned short keycodes[];
 };
 
-static int samsung_keypad_is_s5pv210(struct device *dev)
-{
-   struct platform_device *pdev = 

[PATCH] mmc: core: eMMC 4.5 Power Class Selection Feature

2011-09-13 Thread Girish K S
This patch adds the power class selection feature available
for mmc versions 4.0 and above.
During the enumeration stage before switching to the lower
data bus, check if the power class is supported for the
current bus width. If the power class is available then
switch to the power class and use the higher data bus. If
power class is not supported then switch to the lower data
bus in a worst case.

Signed-off-by: Girish K S girish.shivananja...@linaro.org
---
 drivers/mmc/core/mmc.c  |   77 +++
 include/linux/mmc/mmc.h |   13 
 2 files changed, 90 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 63cc77b..a4004da 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -536,6 +536,81 @@ static struct device_type mmc_type = {
 };
 
 /*
+ * Select the PowerClass for the current bus width
+ * If power class is defined for 4/8 bit bus in the
+ * extended CSD register, select it by executing the
+ * mmc_switch command.
+ */
+static int mmc_select_powerclass(struct mmc_card *card, unsigned int bus_width)
+{
+   u8 *ext_csd;
+   int err;
+   unsigned int pwrclass_val;
+   unsigned int index = 0;
+   struct mmc_host *host = card-host;
+
+   BUG_ON(!card);
+   BUG_ON(!host);
+
+   /* Power class selection is supported for versions = 4.0 */
+   if (card-csd.mmca_vsn  CSD_SPEC_VER_4)
+   return 0;
+   /*Power class values are defined only for 4/8 bit bus*/
+   if (bus_width == EXT_CSD_BUS_WIDTH_1)
+   return 0;
+
+   switch ((1  host-ios.vdd)) {
+   case MMC_VDD_165_195:
+   if (host-ios.clock = 2600)
+   index = EXT_CSD_PWR_CL_26_195;
+   else if (host-ios.clock = 5200)
+   index = (bus_width = EXT_CSD_BUS_WIDTH_8) ?
+   EXT_CSD_PWR_CL_52_195 :
+   EXT_CSD_PWR_CL_DDR_52_195;
+   else if (host-ios.clock = 2)
+   index = EXT_CSD_PWR_CL_200_195;
+   break;
+   case MMC_VDD_32_33:
+   case MMC_VDD_33_34:
+   case MMC_VDD_34_35:
+   case MMC_VDD_35_36:
+   if (host-ios.clock = 2600)
+   index = EXT_CSD_PWR_CL_26_360;
+   else if (host-ios.clock = 5200)
+   index = (bus_width = EXT_CSD_BUS_WIDTH_8) ?
+   EXT_CSD_PWR_CL_52_360 :
+   EXT_CSD_PWR_CL_DDR_52_360;
+   else if (host-ios.clock = 2)
+   index = EXT_CSD_PWR_CL_200_360;
+   break;
+   default:
+   BUG();
+   break;
+   }
+
+   err = mmc_get_ext_csd(card, ext_csd);
+   if (err)
+   goto ret;
+
+   pwrclass_val = ext_csd[index];
+
+   if (bus_width  (EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_BUS_WIDTH_8))
+   pwrclass_val = (pwrclass_val  EXT_CSD_PWR_CL_8BIT_MASK) 
+   EXT_CSD_PWR_CL_8BIT_SHIFT;
+   else
+   pwrclass_val = (pwrclass_val  EXT_CSD_PWR_CL_4BIT_MASK) 
+   EXT_CSD_PWR_CL_4BIT_SHIFT;
+
+   err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
+   EXT_CSD_POWER_CLASS,
+   pwrclass_val,
+   0);
+ret:
+   mmc_free_ext_csd(ext_csd);
+   return err;
+}
+
+/*
  * Handle the detection and initialisation of a card.
  *
  * In the case of a resume, oldcard will contain the card
@@ -802,6 +877,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
bus_width = bus_widths[idx];
if (bus_width == MMC_BUS_WIDTH_1)
ddr = 0; /* no DDR for 1-bit width */
+   mmc_select_powerclass(card, ext_csd_bits[idx][0]);
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
 EXT_CSD_BUS_WIDTH,
 ext_csd_bits[idx][0],
@@ -825,6 +901,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
}
 
if (!err  ddr) {
+   mmc_select_powerclass(card, ext_csd_bits[idx][1]);
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
 EXT_CSD_BUS_WIDTH,
 ext_csd_bits[idx][1],
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index a788e01..e183e32 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -279,10 +279,15 @@ struct _mmc_csd {
 #define EXT_CSD_ERASED_MEM_CONT181 /* RO */
 #define EXT_CSD_BUS_WIDTH  183 /* R/W */
 #define EXT_CSD_HS_TIMING  185 /* R/W */
+#define 

[PATCH V5 0/2] Poweroff Notify eMMC 4.5

2011-09-13 Thread Girish K S
This patch version fixes the problem with power off
notify function, when called for the first time and
card is not yet initialised. 
Earlier version will generate a core dump, so a check 
for NULL is required in the power off function.

Girish K S (2):
  mmc: core: Add power off notify feature(eMMC 4.5)
  mmc: core: Add Poweroff Notify handling eMMC 4.5

 drivers/mmc/core/core.c  |   34 ++
 drivers/mmc/core/mmc.c   |   22 --
 drivers/mmc/host/sdhci.c |   10 ++
 include/linux/mmc/card.h |   20 
 include/linux/mmc/host.h |5 +
 include/linux/mmc/mmc.h  |7 +++
 6 files changed, 96 insertions(+), 2 deletions(-)

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH V5 1/2] mmc: core: Add power off notify feature(eMMC 4.5)

2011-09-13 Thread Girish K S
This patch adds the support for power off notify feature
available in eMMC 4.5 devices.
If the the host has support for this feature, then the
mmc core will notify it to the device by setting the
POWER_OFF_NOTIFICATION byte in the extended csd register
with a value 1(POWER_ON).
This patch should be applied after Seungwon Jeon's
patch for cmd6 timeout.

Signed-off-by: Girish K S girish.shivananja...@linaro.org
---
 drivers/mmc/core/mmc.c   |   19 +--
 include/linux/mmc/card.h |1 +
 include/linux/mmc/host.h |1 +
 include/linux/mmc/mmc.h  |7 +++
 4 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 68eb368..2f06b37 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -410,10 +410,12 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 
*ext_csd)
else
card-erased_byte = 0x0;
 
-   if (card-ext_csd.rev = 6)
+   if (card-ext_csd.rev = 6) {
card-ext_csd.generic_cmd6_time = 10 *
ext_csd[EXT_CSD_GENERIC_CMD6_TIME];
-
+   card-ext_csd.power_off_longtime = 10 *
+   ext_csd[EXT_CSD_POWER_OFF_LONG_TIME];
+   }
 out:
return err;
 }
@@ -710,6 +712,19 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
}
 
/*
+* If the host supports the power_off_notify capability then
+* set the notification byte in the ext_csd register of device
+*/
+   if (host-caps  MMC_CAP_POWER_OFF_NOTIFY) {
+   err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
+   EXT_CSD_POWER_OFF_NOTIFICATION,
+   EXT_CSD_POWER_ON,
+   card-ext_csd.generic_cmd6_time);
+   if (err  err != -EBADMSG)
+   goto free_card;
+   }
+
+   /*
 * Activate high speed (if supported)
 */
if ((card-ext_csd.hs_max_dtr != 0) 
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index e992fe3..2bf2843 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -53,6 +53,7 @@ struct mmc_ext_csd {
unsigned intpart_time;  /* Units: ms */
unsigned intsa_timeout; /* Units: 100ns */
unsigned intgeneric_cmd6_time;  /* Units: ms */
+   unsigned intpower_off_longtime; /* Units: ms */
unsigned inths_max_dtr;
unsigned intsectors;
unsigned intcard_type;
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 1d09562..cf2dadc 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -229,6 +229,7 @@ struct mmc_host {
 #define MMC_CAP_MAX_CURRENT_600(1  28)   /* Host max current 
limit is 600mA */
 #define MMC_CAP_MAX_CURRENT_800(1  29)   /* Host max current 
limit is 800mA */
 #define MMC_CAP_CMD23  (1  30)   /* CMD23 supported. */
+#define MMC_CAP_POWER_OFF_NOTIFY(1  31)/*Notify poweroff supported */
 
mmc_pm_flag_t   pm_caps;/* supported pm features */
 
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index e869f00..a788e01 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -270,6 +270,7 @@ struct _mmc_csd {
  * EXT_CSD fields
  */
 
+#define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */
 #define EXT_CSD_PARTITION_ATTRIBUTE156 /* R/W */
 #define EXT_CSD_PARTITION_SUPPORT  160 /* RO */
 #define EXT_CSD_WR_REL_PARAM   166 /* RO */
@@ -293,6 +294,7 @@ struct _mmc_csd {
 #define EXT_CSD_SEC_ERASE_MULT 230 /* RO */
 #define EXT_CSD_SEC_FEATURE_SUPPORT231 /* RO */
 #define EXT_CSD_TRIM_MULT  232 /* RO */
+#define EXT_CSD_POWER_OFF_LONG_TIME247 /*RO*/
 #define EXT_CSD_GENERIC_CMD6_TIME  248 /* RO */
 
 /*
@@ -329,6 +331,11 @@ struct _mmc_csd {
 #define EXT_CSD_SEC_BD_BLK_EN  BIT(2)
 #define EXT_CSD_SEC_GB_CL_EN   BIT(4)
 
+#define EXT_CSD_NO_POWER_NOTIFICATION  0
+#define EXT_CSD_POWER_ON   1
+#define EXT_CSD_POWER_OFF_SHORT2
+#define EXT_CSD_POWER_OFF_LONG 3
+
 /*
  * MMC_SWITCH access modes
  */
-- 
1.7.1

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH V5 2/2] mmc: core: Add Poweroff Notify handling eMMC 4.5

2011-09-13 Thread Girish K S
This patch adds the power off notification handling
during suspend and system poweroff.
For suspend mode short timeout is used, whereas for the
normal poweroff long timeout is used.

Signed-off-by: Girish K S girish.shivananja...@linaro.org
---
 drivers/mmc/core/core.c  |   34 ++
 drivers/mmc/core/mmc.c   |5 -
 drivers/mmc/host/sdhci.c |   10 ++
 include/linux/mmc/card.h |   19 +++
 include/linux/mmc/host.h |4 
 5 files changed, 71 insertions(+), 1 deletions(-)

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 91a0a74..157060f 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -1130,9 +1130,41 @@ static void mmc_power_up(struct mmc_host *host)
 
 static void mmc_power_off(struct mmc_host *host)
 {
+   struct mmc_card *card = host-card;
+   unsigned int notify_type;
+   unsigned int timeout;
+   int err;
+
host-ios.clock = 0;
host-ios.vdd = 0;
 
+   if ( card != NULL  mmc_card_mmc(card) 
+   (mmc_card_powernotify_on(card))) {
+
+   if (host-power_notify_type == MMC_HOST_PW_NOTIFY_SHORT) {
+   notify_type = EXT_CSD_POWER_OFF_SHORT;
+   timeout = card-ext_csd.generic_cmd6_time;
+   mmc_card_set_powernotify_short(card);
+   } else {
+   notify_type = EXT_CSD_POWER_OFF_LONG;
+   timeout = card-ext_csd.power_off_longtime;
+   mmc_card_set_powernotify_long(card);
+   }
+
+   err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
+   EXT_CSD_POWER_OFF_NOTIFICATION,
+   notify_type, timeout);
+
+   if (err  err != -EBADMSG)
+   printk(KERN_ERR Device failed to respond 
+   within %d poweroff time.
+   forcefully powering down
+   the device\n, timeout);
+
+   /*Set the card state to no notification after the poweroff*/
+   mmc_card_set_powernotify_off(card);
+   }
+
/*
 * Reset ocr mask to be the highest possible voltage supported for
 * this mmc host. This value will be used at next power up.
@@ -2022,6 +2054,7 @@ int mmc_pm_notify(struct notifier_block *notify_block,
 
spin_lock_irqsave(host-lock, flags);
host-rescan_disable = 1;
+   host-power_notify_type = MMC_HOST_PW_NOTIFY_SHORT;
spin_unlock_irqrestore(host-lock, flags);
cancel_delayed_work_sync(host-detect);
 
@@ -2044,6 +2077,7 @@ int mmc_pm_notify(struct notifier_block *notify_block,
 
spin_lock_irqsave(host-lock, flags);
host-rescan_disable = 0;
+   host-power_notify_type = MMC_HOST_PW_NOTIFY_LONG;
spin_unlock_irqrestore(host-lock, flags);
mmc_detect_change(host, 0);
 
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 2f06b37..63cc77b 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -715,7 +715,8 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
 * If the host supports the power_off_notify capability then
 * set the notification byte in the ext_csd register of device
 */
-   if (host-caps  MMC_CAP_POWER_OFF_NOTIFY) {
+   if ((host-caps  MMC_CAP_POWER_OFF_NOTIFY) 
+   (mmc_card_powernotify_off(card))) {
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
EXT_CSD_POWER_OFF_NOTIFICATION,
EXT_CSD_POWER_ON,
@@ -724,6 +725,8 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
goto free_card;
}
 
+   if(!err)
+   mmc_card_set_powernotify_on(card);
/*
 * Activate high speed (if supported)
 */
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 0e02cc1..92ea734 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2566,6 +2566,16 @@ int sdhci_add_host(struct sdhci_host *host)
if (caps[1]  SDHCI_DRIVER_TYPE_D)
mmc-caps |= MMC_CAP_DRIVER_TYPE_D;
 
+   /*
+* If Notify capability is enabled and
+* notify type is not initialised by host, set default to
+* long power off notify timeout value
+*/
+   if (mmc-caps  MMC_CAP_POWER_OFF_NOTIFY)
+   mmc-power_notify_type = MMC_HOST_PW_NOTIFY_SHORT;
+   else
+   mmc-power_notify_type = MMC_HOST_PW_NOTIFY_NONE;
+
/* Initial value for re-tuning timer count */
host-tuning_count = (caps[1]  SDHCI_RETUNING_TIMER_COUNT_MASK) 
  SDHCI_RETUNING_TIMER_COUNT_SHIFT;
diff --git a/include/linux/mmc/card.h 

RE: [PATCH] mmc: core: Fix the incorrect calculation for erase unit size.

2011-09-13 Thread Seungwon Jeon
Chris Ball wrote:
 
 Hi,
 
 On Thu, Sep 08 2011, Seungwon Jeon wrote:
  Erase unit size of high capacity is multiple of 512KiB not 1024KiB.
 
 Could we have some more info, please?  What are the visible symptoms
 of the erase unit size being incorrect, how did you realize this was
 a problem, should this patch be applied to stable@, etc.

It is mentioned from eMMC Spec.
Erase unit size is defined in 512Kbyte * HC_ERASE_GRP_SIZE(EXT_CSD[224]).

Thanks.

 
 Thanks,
 
 - Chris.
 --
 Chris Ball   c...@laptop.org   http://printf.net/
 One Laptop Per Child

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] mmc: core: Fix the incorrect calculation for erase unit size.

2011-09-13 Thread Chris Ball
Hi,

On Tue, Sep 13 2011, Seungwon Jeon wrote:
 On Thu, Sep 08 2011, Seungwon Jeon wrote:
  Erase unit size of high capacity is multiple of 512KiB not 1024KiB.
 
 Could we have some more info, please?  What are the visible symptoms
 of the erase unit size being incorrect, how did you realize this was
 a problem, should this patch be applied to stable@, etc.

 It is mentioned from eMMC Spec.
 Erase unit size is defined in 512Kbyte * HC_ERASE_GRP_SIZE(EXT_CSD[224]).

You haven't answered any of the other questions I asked, though.

Thanks,

- Chris.
-- 
Chris Ball   c...@laptop.org   http://printf.net/
One Laptop Per Child
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] mmc: core: Fix the incorrect calculation for erase unit size.

2011-09-13 Thread Seungwon Jeon
Chris Ball wrote:
 
 Hi,
 
 On Tue, Sep 13 2011, Seungwon Jeon wrote:
  On Thu, Sep 08 2011, Seungwon Jeon wrote:
   Erase unit size of high capacity is multiple of 512KiB not 1024KiB.
 
  Could we have some more info, please?  What are the visible symptoms
  of the erase unit size being incorrect, how did you realize this was
  a problem, should this patch be applied to stable@, etc.
 
  It is mentioned from eMMC Spec.
  Erase unit size is defined in 512Kbyte * HC_ERASE_GRP_SIZE(EXT_CSD[224]).
 
 You haven't answered any of the other questions I asked, though.

I didn't catch symptoms you expect. But it seems like plain.
I just noticed the difference with spec.

Best regards,
Seungwon Jeon.

 
 Thanks,
 
 - Chris.
 --
 Chris Ball   c...@laptop.org   http://printf.net/
 One Laptop Per Child

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] ARM: Exynos4: use s5p-timer for UniversalC210 board

2011-09-13 Thread Kyungmin Park
Hi,

It's required for boot universal c210 w/ EVT0 chip.
Can you include it at 3.1 fixed branch?

Thank you,
Kyungmin Park

On Tue, Jul 26, 2011 at 2:50 PM, Marek Szyprowski
m.szyprow...@samsung.com wrote:
 Commit 069d4e743 removed support for local timers and forced to use MCT as
 event source. However MCT is not operating properly on early revision (EVT0)
 of Exynos4 SoCs. All UniversalC210 boards are based on Exynos4 EVT0, so that
 commit broke support for it. This patch provides a workaround that enables
 UniversalC210 boards to boot again. s5p-timer is used as an event source.

 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  arch/arm/mach-exynos4/Kconfig               |    3 +++
  arch/arm/mach-exynos4/mach-universal_c210.c |    4 +++-
  2 files changed, 6 insertions(+), 1 deletions(-)

 diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos4/Kconfig
 index 9d62e13..2aad73f 100644
 --- a/arch/arm/mach-exynos4/Kconfig
 +++ b/arch/arm/mach-exynos4/Kconfig
 @@ -173,6 +173,9 @@ config MACH_ARMLEX4210
  config MACH_UNIVERSAL_C210
        bool Mobile UNIVERSAL_C210 Board
        select CPU_EXYNOS4210
 +       select S5P_HRT
 +       select CLKSRC_MMIO
 +       select HAVE_SCHED_CLOCK
        select S5P_GPIO_INT
        select S5P_DEV_FIMC0
        select S5P_DEV_FIMC1
 diff --git a/arch/arm/mach-exynos4/mach-universal_c210.c 
 b/arch/arm/mach-exynos4/mach-universal_c210.c
 index 0e280d1..ca9e7b7 100644
 --- a/arch/arm/mach-exynos4/mach-universal_c210.c
 +++ b/arch/arm/mach-exynos4/mach-universal_c210.c
 @@ -34,6 +34,7 @@
  #include plat/mfc.h
  #include plat/sdhci.h
  #include plat/pd.h
 +#include plat/s5p-time.h

  #include mach/map.h

 @@ -730,6 +731,7 @@ static void __init universal_map_io(void)
        s5p_init_io(NULL, 0, S5P_VA_CHIPID);
        s3c24xx_init_clocks(2400);
        s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
 +       s5p_set_timer_source(S5P_PWM2, S5P_PWM4);
  }

  static void __init universal_reserve(void)
 @@ -766,6 +768,6 @@ MACHINE_START(UNIVERSAL_C210, UNIVERSAL_C210)
        .init_irq       = exynos4_init_irq,
        .map_io         = universal_map_io,
        .init_machine   = universal_machine_init,
 -       .timer          = exynos4_timer,
 +       .timer          = s5p_timer,
        .reserve        = universal_reserve,
  MACHINE_END
 --
 1.7.1.569.g6f426

 --
 To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 
 in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html