Patchwork [U-Boot,1/3] net2big_v2: initialize I2C fan at startup

login
register
mail settings
Submitter Simon Guinot
Date June 17, 2013, 8:58 p.m.
Message ID <1371502684-17522-2-git-send-email-simon.guinot@sequanux.org>
Download mbox | patch
Permalink /patch/252061/
State Superseded
Delegated to: Prafulla Wadaskar
Headers show

Comments

Simon Guinot - June 17, 2013, 8:58 p.m.
This patch ensures minimal cooling for the net2big_v2 by automatically
starting the I2C fan (GMT G762) at low speed (2800 RPM).

Signed-off-by: Simon Guinot <simon.guinot@sequanux.org>
---
 board/LaCie/net2big_v2/net2big_v2.c |   54 ++++++++++++++++++++++++++++++++++-
 board/LaCie/net2big_v2/net2big_v2.h |    5 ++++
 include/configs/lacie_kw.h          |    9 +++++-
 3 files changed, 66 insertions(+), 2 deletions(-)
Prafulla Wadaskar - June 18, 2013, 6:48 a.m.
> -----Original Message-----
> From: Simon Guinot [mailto:simon.guinot@sequanux.org]
> Sent: 18 June 2013 02:28
> To: Prafulla Wadaskar
> Cc: Albert ARIBAUD; u-boot@lists.denx.de
> Subject: [PATCH 1/3] net2big_v2: initialize I2C fan at
> startup
> 
> This patch ensures minimal cooling for the net2big_v2
> by automatically
> starting the I2C fan (GMT G762) at low speed (2800 RPM).
> 
> Signed-off-by: Simon Guinot <simon.guinot@sequanux.org>
> ---
>  board/LaCie/net2big_v2/net2big_v2.c |   54
> ++++++++++++++++++++++++++++++++++-
>  board/LaCie/net2big_v2/net2big_v2.h |    5 ++++
>  include/configs/lacie_kw.h          |    9 +++++-
>  3 files changed, 66 insertions(+), 2 deletions(-)
> 
> diff --git a/board/LaCie/net2big_v2/net2big_v2.c
> b/board/LaCie/net2big_v2/net2big_v2.c
> index e524f35..6cca4fb 100644
> --- a/board/LaCie/net2big_v2/net2big_v2.c
> +++ b/board/LaCie/net2big_v2/net2big_v2.c
> @@ -22,6 +22,7 @@
> 
>  #include <common.h>
>  #include <command.h>
> +#include <i2c.h>
>  #include <asm/arch/cpu.h>
>  #include <asm/arch/kirkwood.h>
>  #include <asm/arch/mpp.h>
> @@ -92,8 +93,59 @@ int board_init(void)
>  }
> 
>  #if defined(CONFIG_MISC_INIT_R)
> +
> +#if defined(CONFIG_CMD_I2C) &&
> defined(CONFIG_SYS_I2C_G762_ADDR)
> +/*
> + * Start I2C fan (GMT G762 controller)
> + */
> +static void init_fan(void)
> +{
> +	u8 data;
> +
> +	i2c_set_bus_num(0);
> +
> +	/* Enable open-loop and PWM modes */
> +	data = 0x20;
> +	if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
> +		      G762_REG_FAN_CMD1, 1, &data, 1) != 0)
> +		goto err;
> +	data = 0;
> +	if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
> +		      G762_REG_SET_CNT, 1, &data, 1) != 0)
> +		goto err;
> +	/*
> +	 * RPM to PWM (set_out register) fan speed
> conversion array:
> +	 * 0    0x00
> +	 * 1500	0x04
> +	 * 2800	0x08
> +	 * 3400	0x0C
> +	 * 3700	0x10
> +	 * 4400	0x20
> +	 * 4700	0x30
> +	 * 4800	0x50
> +	 * 5200	0x80
> +	 * 5400	0xC0
> +	 * 5500	0xFF
> +	 *
> +	 * Start fan at low speed (2800 RPM):
> +	 */
> +	data = 0x08;
> +	if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
> +		      G762_REG_SET_OUT, 1, &data, 1) != 0)
> +		goto err;
> +
> +	return;
> +err:
> +	printf("Error: failed to start I2C fan @%02x\n",
> +	       CONFIG_SYS_I2C_G762_ADDR);
> +}
> +#else
> +static void init_fan(void) {}
> +#endif /* CONFIG_CMD_I2C && CONFIG_SYS_I2C_G762_ADDR
> */
> +
>  int misc_init_r(void)
>  {
> +	init_fan();
>  #if defined(CONFIG_CMD_I2C) &&
> defined(CONFIG_SYS_I2C_EEPROM_ADDR)
>  	if (!getenv("ethaddr")) {
>  		uchar mac[6];
> @@ -103,7 +155,7 @@ int misc_init_r(void)
>  #endif
>  	return 0;
>  }
> -#endif
> +#endif /* CONFIG_MISC_INIT_R */
> 
>  #if defined(CONFIG_CMD_NET) &&
> defined(CONFIG_RESET_PHY_R)
>  /* Configure and initialize PHY */
> diff --git a/board/LaCie/net2big_v2/net2big_v2.h
> b/board/LaCie/net2big_v2/net2big_v2.h
> index f9778f4..83537d6 100644
> --- a/board/LaCie/net2big_v2/net2big_v2.h
> +++ b/board/LaCie/net2big_v2/net2big_v2.h
> @@ -32,4 +32,9 @@
>  /* Buttons */
>  #define NET2BIG_V2_GPIO_PUSH_BUTTON	34
> 
> +/* GMT G762 registers (I2C fan controller) */
> +#define G762_REG_SET_CNT		0x00
> +#define G762_REG_SET_OUT		0x03
> +#define G762_REG_FAN_CMD1		0x04
> +
>  #endif /* NET2BIG_V2_H */
> diff --git a/include/configs/lacie_kw.h
> b/include/configs/lacie_kw.h
> index 09b5798..e2b3b21 100644
> --- a/include/configs/lacie_kw.h
> +++ b/include/configs/lacie_kw.h
> @@ -120,10 +120,14 @@
>  #endif
> 
>  /*
> + * Enable platform initialisation via misc_init_r()
> function
> + */
> +#define CONFIG_MISC_INIT_R
> +
> +/*
>   * Ethernet Driver configuration
>   */
>  #ifdef CONFIG_CMD_NET
> -#define CONFIG_MISC_INIT_R /* Call misc_init_r() to
> initialize MAC address */
>  #define CONFIG_MVGBE_PORTS		{1, 0} /* enable port
> 0 only */
>  #define CONFIG_NETCONSOLE
>  #endif
> @@ -153,6 +157,9 @@
>  #define CONFIG_SYS_I2C_EEPROM_ADDR		0x50
>  #define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS	4 /* 16-
> byte page size */
>  #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN		1 /* 8-bit
> device address */
> +#if defined(CONFIG_NET2BIG_V2)
> +#define CONFIG_SYS_I2C_G762_ADDR		0x3e
> +#endif
>  #endif /* CONFIG_CMD_I2C */
> 

Acked-by: Prafulla Wadaskar <prafulla@marvell.com>


Regards...
Prafulla . . .

Patch

diff --git a/board/LaCie/net2big_v2/net2big_v2.c b/board/LaCie/net2big_v2/net2big_v2.c
index e524f35..6cca4fb 100644
--- a/board/LaCie/net2big_v2/net2big_v2.c
+++ b/board/LaCie/net2big_v2/net2big_v2.c
@@ -22,6 +22,7 @@ 
 
 #include <common.h>
 #include <command.h>
+#include <i2c.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/kirkwood.h>
 #include <asm/arch/mpp.h>
@@ -92,8 +93,59 @@  int board_init(void)
 }
 
 #if defined(CONFIG_MISC_INIT_R)
+
+#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_G762_ADDR)
+/*
+ * Start I2C fan (GMT G762 controller)
+ */
+static void init_fan(void)
+{
+	u8 data;
+
+	i2c_set_bus_num(0);
+
+	/* Enable open-loop and PWM modes */
+	data = 0x20;
+	if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
+		      G762_REG_FAN_CMD1, 1, &data, 1) != 0)
+		goto err;
+	data = 0;
+	if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
+		      G762_REG_SET_CNT, 1, &data, 1) != 0)
+		goto err;
+	/*
+	 * RPM to PWM (set_out register) fan speed conversion array:
+	 * 0    0x00
+	 * 1500	0x04
+	 * 2800	0x08
+	 * 3400	0x0C
+	 * 3700	0x10
+	 * 4400	0x20
+	 * 4700	0x30
+	 * 4800	0x50
+	 * 5200	0x80
+	 * 5400	0xC0
+	 * 5500	0xFF
+	 *
+	 * Start fan at low speed (2800 RPM):
+	 */
+	data = 0x08;
+	if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
+		      G762_REG_SET_OUT, 1, &data, 1) != 0)
+		goto err;
+
+	return;
+err:
+	printf("Error: failed to start I2C fan @%02x\n",
+	       CONFIG_SYS_I2C_G762_ADDR);
+}
+#else
+static void init_fan(void) {}
+#endif /* CONFIG_CMD_I2C && CONFIG_SYS_I2C_G762_ADDR */
+
 int misc_init_r(void)
 {
+	init_fan();
 #if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
 	if (!getenv("ethaddr")) {
 		uchar mac[6];
@@ -103,7 +155,7 @@  int misc_init_r(void)
 #endif
 	return 0;
 }
-#endif
+#endif /* CONFIG_MISC_INIT_R */
 
 #if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
 /* Configure and initialize PHY */
diff --git a/board/LaCie/net2big_v2/net2big_v2.h b/board/LaCie/net2big_v2/net2big_v2.h
index f9778f4..83537d6 100644
--- a/board/LaCie/net2big_v2/net2big_v2.h
+++ b/board/LaCie/net2big_v2/net2big_v2.h
@@ -32,4 +32,9 @@ 
 /* Buttons */
 #define NET2BIG_V2_GPIO_PUSH_BUTTON	34
 
+/* GMT G762 registers (I2C fan controller) */
+#define G762_REG_SET_CNT		0x00
+#define G762_REG_SET_OUT		0x03
+#define G762_REG_FAN_CMD1		0x04
+
 #endif /* NET2BIG_V2_H */
diff --git a/include/configs/lacie_kw.h b/include/configs/lacie_kw.h
index 09b5798..e2b3b21 100644
--- a/include/configs/lacie_kw.h
+++ b/include/configs/lacie_kw.h
@@ -120,10 +120,14 @@ 
 #endif
 
 /*
+ * Enable platform initialisation via misc_init_r() function
+ */
+#define CONFIG_MISC_INIT_R
+
+/*
  * Ethernet Driver configuration
  */
 #ifdef CONFIG_CMD_NET
-#define CONFIG_MISC_INIT_R /* Call misc_init_r() to initialize MAC address */
 #define CONFIG_MVGBE_PORTS		{1, 0} /* enable port 0 only */
 #define CONFIG_NETCONSOLE
 #endif
@@ -153,6 +157,9 @@ 
 #define CONFIG_SYS_I2C_EEPROM_ADDR		0x50
 #define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS	4 /* 16-byte page size */
 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN		1 /* 8-bit device address */
+#if defined(CONFIG_NET2BIG_V2)
+#define CONFIG_SYS_I2C_G762_ADDR		0x3e
+#endif
 #endif /* CONFIG_CMD_I2C */
 
 /*