]> code.ossystems Code Review - meta-freescale.git/blob
9244dbffe4c7a7cb0d6930187857a289fe06b79a
[meta-freescale.git] /
1 From 3bc50cddbc5bc8c20c3bac50794a7ec80602ab16 Mon Sep 17 00:00:00 2001
2 From: Wayne Zou <b36644@freescale.com>
3 Date: Mon, 21 Nov 2011 15:06:54 +0800
4 Subject: [PATCH] ENGR00162708 MX5: Add I2C dummy write and mask nONKEY event for i2c operation
5
6 MX5: Add I2C dummy write when acessing DA9053 registers and mask nONKEY event
7 for i2c operation before suspend
8
9 Signed-off-by: Wayne Zou <b36644@freescale.com>
10 (cherry picked from commit 0cc56da7dc91bbd5b6e9a51c1576daedce36093c)
11 ---
12  arch/arm/mach-mx5/pm_da9053.c |   22 +++++++++++++++++++---
13  1 files changed, 19 insertions(+), 3 deletions(-)
14
15 diff --git a/arch/arm/mach-mx5/pm_da9053.c b/arch/arm/mach-mx5/pm_da9053.c
16 index 63eda3a..7bb8915 100644
17 --- a/arch/arm/mach-mx5/pm_da9053.c
18 +++ b/arch/arm/mach-mx5/pm_da9053.c
19 @@ -60,6 +60,7 @@ as the normal setting on Da9053 */
20  #define DA9052_GPIO0809_SMD_SET 0x18
21  #define DA9052_ID1415_SMD_SET   0x1
22  #define DA9052_GPI9_IRQ_MASK    0x2
23 +#define DA9052_IRQ_MASKB_ONKEY   0x1
24  
25  static u8 volt_settings[DA9052_LDO10_REG - DA9052_BUCKCORE_REG + 1];
26  extern int pm_i2c_imx_xfer(struct i2c_msg *msgs, int num);
27 @@ -67,7 +68,8 @@ extern int pm_i2c_imx_xfer(struct i2c_msg *msgs, int num);
28  static void pm_da9053_read_reg(u8 reg, u8 *value)
29  {
30         unsigned char buf[2] = {0, 0};
31 -       struct i2c_msg i2cmsg[2];
32 +       unsigned char dummy[2] = {0xff, 0xff};
33 +       struct i2c_msg i2cmsg[3];
34         buf[0] = reg;
35         i2cmsg[0].addr  = 0x48 ;
36         i2cmsg[0].len   = 1;
37 @@ -83,16 +85,22 @@ static void pm_da9053_read_reg(u8 reg, u8 *value)
38  
39         pm_i2c_imx_xfer(i2cmsg, 2);
40         *value = buf[1];
41 +
42 +       i2cmsg[2].addr  = 0x48 ;
43 +       i2cmsg[2].len   = 2;
44 +       i2cmsg[2].buf   = &dummy[0];
45 +       i2cmsg[2].flags = 0;
46 +       pm_i2c_imx_xfer(i2cmsg, 1);
47  }
48  
49  static void pm_da9053_write_reg(u8 reg, u8 value)
50  {
51 -       unsigned char buf[2] = {0, 0};
52 +       unsigned char buf[4] = {0, 0, 0xff, 0xff};
53         struct i2c_msg i2cmsg[2];
54         buf[0] = reg;
55         buf[1] = value;
56         i2cmsg[0].addr  = 0x48 ;
57 -       i2cmsg[0].len   = 2;
58 +       i2cmsg[0].len   = 4;
59         i2cmsg[0].buf   = &buf[0];
60         i2cmsg[0].flags = 0;
61         pm_i2c_imx_xfer(i2cmsg, 1);
62 @@ -172,6 +180,10 @@ int da9053_suspend_cmd_hw(void)
63         }
64         clk_enable(i2c_clk);
65  
66 +       pm_da9053_read_reg(DA9052_IRQMASKB_REG, &data);
67 +       data |= DA9052_IRQ_MASKB_ONKEY;
68 +       pm_da9053_write_reg(DA9052_IRQMASKB_REG, data);
69 +
70         pm_da9053_preset_voltage();
71         pm_da9053_write_reg(DA9052_CONTROLC_REG,
72                                 DA9052_CONTROLC_SMD_SET);
73 @@ -194,6 +206,10 @@ int da9053_suspend_cmd_hw(void)
74         pm_da9053_write_reg(DA9052_SEQTIMER_REG, 0);
75         /* pm_da9053_write_reg(DA9052_SEQB_REG, 0x1f); */
76  
77 +       pm_da9053_read_reg(DA9052_IRQMASKB_REG, &data);
78 +       data &= ~DA9052_IRQ_MASKB_ONKEY;
79 +       pm_da9053_write_reg(DA9052_IRQMASKB_REG, data);
80 +
81         clk_disable(i2c_clk);
82         clk_put(i2c_clk);
83         return 0;
84 -- 
85 1.5.4.4
86