diff mbox

[U-Boot,5/5] mpc5200: digsy_mtc: add support for writing 'appreg' value

Message ID 1306505304-9593-6-git-send-email-agust@denx.de
State Superseded
Headers show

Commit Message

Anatolij Gustschin May 27, 2011, 2:08 p.m. UTC
Up to now only reading 'appreg' value was implemented in the
digsyMTC special 'mtc appreg' command. Extend the command to
support writing appreg value, too.

Signed-off-by: Werner Pfister <Pfister_Werner@intercontrol.de>
Signed-off-by: Anatolij Gustschin <agust@denx.de>
---
 board/digsy_mtc/cmd_mtc.c |   46 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 40 insertions(+), 6 deletions(-)

Comments

Detlev Zundel May 27, 2011, 3:36 p.m. UTC | #1
Hi Anatolij,

> Up to now only reading 'appreg' value was implemented in the
> digsyMTC special 'mtc appreg' command. Extend the command to
> support writing appreg value, too.
>
> Signed-off-by: Werner Pfister <Pfister_Werner@intercontrol.de>
> Signed-off-by: Anatolij Gustschin <agust@denx.de>
> ---
>  board/digsy_mtc/cmd_mtc.c |   46 +++++++++++++++++++++++++++++++++++++++-----
>  1 files changed, 40 insertions(+), 6 deletions(-)
>
> diff --git a/board/digsy_mtc/cmd_mtc.c b/board/digsy_mtc/cmd_mtc.c
> index ba0c367..a12becf 100644
> --- a/board/digsy_mtc/cmd_mtc.c
> +++ b/board/digsy_mtc/cmd_mtc.c

[...]

> @@ -214,13 +222,34 @@ static int do_mtc_appreg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
>  	pcmd.cmd_val0 = 5;	/* max. Count */
>  	pcmd.cmd_val1 = 5;	/* max. Time */
>  	pcmd.cmd_val2 = 0;	/* =0 means read appreg */
> +	pcmd.user_out = user_out;
>  
>  	mtc_calculate_checksum(&pcmd);
>  	err = msp430_xfer(&pcmd, &prx);
>  
> +	/* on success decide between read or write */
>  	if (!err) {
> -		sprintf(buf, "%d", prx.ack2);
> -		setenv("appreg", buf);
> +		if (argc == 2) {
> +			appreg = simple_strtol(argv[1], NULL, 10);
> +			if (appreg == 0) {
> +				printf("mtc appreg: invalid parameter - "
> +				       "must be betwenn 1 and 255\n");

Typo, should be "between"

Otherwise

Acked-by: Detlev Zundel <dzu@denx.de>

Thanks
  Detlev
Anatolij Gustschin May 27, 2011, 6 p.m. UTC | #2
Hi Detlev,

On Fri, 27 May 2011 17:36:01 +0200
Detlev Zundel <dzu@denx.de> wrote:
...
> > +				       "must be betwenn 1 and 255\n");
> 
> Typo, should be "between"

I'll fix it. Thanks for catching!

Thanks,
Anatolij
diff mbox

Patch

diff --git a/board/digsy_mtc/cmd_mtc.c b/board/digsy_mtc/cmd_mtc.c
index ba0c367..a12becf 100644
--- a/board/digsy_mtc/cmd_mtc.c
+++ b/board/digsy_mtc/cmd_mtc.c
@@ -31,6 +31,8 @@ 
 
 DECLARE_GLOBAL_DATA_PTR;
 
+static uchar user_out;
+
 static const char *led_names[] = {
 	"diag",
 	"can1",
@@ -112,6 +114,8 @@  static int do_mtc_led(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	else
 		pcmd.cmd_val2 = 0;
 
+	pcmd.user_out = user_out;
+
 	mtc_calculate_checksum(&pcmd);
 	err = msp430_xfer(&pcmd, &prx);
 
@@ -128,6 +132,7 @@  static int do_mtc_key(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	memset(&prx, 0, sizeof(prx));
 
 	pcmd.cmd = CMD_GET_VIM;
+	pcmd.user_out = user_out;
 
 	mtc_calculate_checksum(&pcmd);
 	err = msp430_xfer(&pcmd, &prx);
@@ -160,6 +165,7 @@  static int do_mtc_digout(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 
 	pcmd.cmd = CMD_GET_VIM;
 	pcmd.user_out = channel_mask;
+	user_out = channel_mask;
 
 	mtc_calculate_checksum(&pcmd);
 	err = msp430_xfer(&pcmd, &prx);
@@ -187,6 +193,7 @@  static int do_mtc_digin(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
 	memset(&prx, 0, sizeof(prx));
 
 	pcmd.cmd = CMD_GET_VIM;
+	pcmd.user_out = user_out;
 
 	mtc_calculate_checksum(&pcmd);
 	err = msp430_xfer(&pcmd, &prx);
@@ -205,6 +212,7 @@  static int do_mtc_appreg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 	rx_msp_cmd prx;
 	int err;
 	char buf[5];
+	uchar appreg;
 
 	/* read appreg */
 	memset(&pcmd, 0, sizeof(pcmd));
@@ -214,13 +222,34 @@  static int do_mtc_appreg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 	pcmd.cmd_val0 = 5;	/* max. Count */
 	pcmd.cmd_val1 = 5;	/* max. Time */
 	pcmd.cmd_val2 = 0;	/* =0 means read appreg */
+	pcmd.user_out = user_out;
 
 	mtc_calculate_checksum(&pcmd);
 	err = msp430_xfer(&pcmd, &prx);
 
+	/* on success decide between read or write */
 	if (!err) {
-		sprintf(buf, "%d", prx.ack2);
-		setenv("appreg", buf);
+		if (argc == 2) {
+			appreg = simple_strtol(argv[1], NULL, 10);
+			if (appreg == 0) {
+				printf("mtc appreg: invalid parameter - "
+				       "must be betwenn 1 and 255\n");
+				return -1;
+			}
+			memset(&pcmd, 0, sizeof(pcmd));
+			pcmd.cmd = CMD_WD_PARA;
+			pcmd.cmd_val0 = prx.ack3; /* max. Count */
+			pcmd.cmd_val1 = prx.ack0; /* max. Time */
+			pcmd.cmd_val2 = appreg;	  /* !=0 means write appreg */
+			pcmd.user_out = user_out;
+			memset(&prx, 0, sizeof(prx));
+
+			mtc_calculate_checksum(&pcmd);
+			err = msp430_xfer(&pcmd, &prx);
+		} else {
+			sprintf(buf, "%d", prx.ack2);
+			setenv("appreg", buf);
+		}
 	}
 
 	return err;
@@ -236,6 +265,7 @@  static int do_mtc_version(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
 	memset(&prx, 0, sizeof(prx));
 
 	pcmd.cmd = CMD_FW_VERSION;
+	pcmd.user_out = user_out;
 
 	mtc_calculate_checksum(&pcmd);
 	err = msp430_xfer(&pcmd, &prx);
@@ -259,6 +289,7 @@  static int do_mtc_state(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
 
 	pcmd.cmd = CMD_WD_WDSTATE;
 	pcmd.cmd_val2 = 1;
+	pcmd.user_out = user_out;
 
 	mtc_calculate_checksum(&pcmd);
 	err = msp430_xfer(&pcmd, &prx);
@@ -288,8 +319,10 @@  cmd_tbl_t cmd_mtc_sub[] = {
 	"returns state of user key", ""),
 	U_BOOT_CMD_MKENT(version, 0, 1, do_mtc_version,
 	"returns firmware version of supervisor uC", ""),
-	U_BOOT_CMD_MKENT(appreg, 0, 1, do_mtc_appreg,
-	"reads appreg value and stores in environment variable 'appreg'", ""),
+	U_BOOT_CMD_MKENT(appreg, 1, 1, do_mtc_appreg,
+	"reads or writes appreg value and stores in environment "
+	"variable 'appreg'",
+	"[value] - value (1 - 255) to write to appreg"),
 	U_BOOT_CMD_MKENT(digin, 1, 1, do_mtc_digin,
 	"returns state of digital input",
 	"<channel_num> - get state of digital input (1 or 2)\n"),
@@ -342,8 +375,9 @@  U_BOOT_CMD(mtc, 5, 1, cmd_mtc,
 	"  [blink]: blink interval in 100ms steps (1 - 10; 0 = static)\n"
 	"key - returns state of user key\n"
 	"version - returns firmware version of supervisor uC\n"
-	"appreg - reads appreg value and stores in environment variable"
-	" 'appreg'\n"
+	"appreg [value] - reads (in environment variable 'appreg') or writes"
+	" appreg value\n"
+	"  [value]: value (1 - 255) to write to appreg\n"
 	"digin [channel] - returns state of digital input (1 or 2)\n"
 	"digout <on|off> <on|off> - sets state of two digital outputs\n"
 	"state - displays state\n"