summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorSuresh Rajashekara <sureshraj@google.com>2016-08-15 16:18:11 -0700
committerPatrick Georgi <pgeorgi@google.com>2016-10-06 21:48:38 +0200
commita39a5b60b4a11bb2686166f58987158b980c7f21 (patch)
treef40dc230680658095552b2c485f1857354dbc706 /src/drivers
parent48f708d199769d03ef1c31184955703d9d73ad80 (diff)
downloadcoreboot-a39a5b60b4a11bb2686166f58987158b980c7f21.tar.xz
i2c/ww_ring: Change LED configuration for Gale EVT3
Gale EVT3 has only one LED controller (earlier we had 2). Remove the support for the second controller and also the corresponding microcode. The color values used are the same as onHub (Arkham to be specific). BUG=b:30890905 TEST=Move the device to different states manually by appropriate actions (like dev mode, rec mode etc) and observe the different colors. BRANCH=None Change-Id: I853035610ea7ea7c8d29c30d2de13c9e2e786b2b Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: 593905d2d69daa7482318aa5f5c5cd7cf984043e Original-Change-Id: If8f22abd605faac6f6215ef600041740ce15ea0c Original-Signed-off-by: Suresh Rajashekara <sureshraj@google.com> Original-Reviewed-on: https://chromium-review.googlesource.com/370821 Original-Commit-Ready: Suresh Rajashekara <sureshraj@chromium.org> Original-Tested-by: Suresh Rajashekara <sureshraj@chromium.org> Original-Reviewed-by: Kan Yan <kyan@google.com> Reviewed-on: https://review.coreboot.org/16697 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/i2c/ww_ring/ww_ring_programs.c232
-rw-r--r--src/drivers/i2c/ww_ring/ww_ring_programs.h2
2 files changed, 49 insertions, 185 deletions
diff --git a/src/drivers/i2c/ww_ring/ww_ring_programs.c b/src/drivers/i2c/ww_ring/ww_ring_programs.c
index a35998c57a..5b0c8a8d52 100644
--- a/src/drivers/i2c/ww_ring/ww_ring_programs.c
+++ b/src/drivers/i2c/ww_ring/ww_ring_programs.c
@@ -46,36 +46,36 @@
* Solid LED display, the arguments of the set_pwm commands set intensity and
* color of the display:
-row_red: dw 0000000001001001b
-row_green: dw 0000000010010010b
-row_blue: dw 0000000100100100b
+row_red: dw 0000000000000001b
+row_green: dw 0000000000000010b
+row_blue: dw 0000000000000100b
.segment program1
mux_map_addr row_red
- set_pwm 1
+ set_pwm 0
end
.segment program2
mux_map_addr row_green
- set_pwm 1
+ set_pwm 0
end
.segment program3
mux_map_addr row_blue
- set_pwm 1
+ set_pwm 0
end
*/
/* RGB set to 000000, resulting in all LEDs off. */
static const uint8_t solid_000000_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x9F, 0x80,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x9F, 0x80,
0x40, 0, 0xC0, 0x00, 0x9F, 0x81, 0x40, 0,
0xC0, 0x00, 0x9F, 0x82, 0x40, 0, 0xC0, 0x00
};
/* Rgb set to 128, resulting in a brightish white color. */
static const uint8_t solid_808080_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x9F, 0x80,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x9F, 0x80,
0x40, 128, 0xC0, 0x00, 0x9F, 0x81, 0x40, 128,
0xC0, 0x00, 0x9F, 0x82, 0x40, 128, 0xC0, 0x00
};
@@ -100,20 +100,10 @@ static const TiLp55231Program solid_000000_program = {
* The three internal engines seem to be competing for resources and get out
* of sync in seconds if left running asynchronously.
*
- * When there are two separate controllers, with three engine each, they all
- * run away from each other in no time, resulting in some completely chaotic
- * LED behavior.
- *
* When solid patterns are deployed with instanteneous color intensity
* changes, all three LEDs can be controlled by one engine in sequential
* accesses. But the controllers still neeed to be synchronized.
*
- * The first controller is loaded and started first, but it sits waiting for
- * the trigger from the second controller to actually start the cycle. Once
- * both controllers start running, the first controller is the master, sending
- * sych triggers to the second one each time the LED is supposed to be turned
- * on or off.
- *
* The maximum timer duration of lp55231 is .48 seconds. To achieve longer
* blinking intervals the loops delays are deployed. Only the first controller
* intervals need to be changed, as the second one is in lockstep with the
@@ -126,29 +116,26 @@ static const TiLp55231Program solid_000000_program = {
*/
/*
* blink_solid1.src
-row_red: dw 0000000001001001b
-row_green: dw 0000000010010010b
-row_blue: dw 0000000100100100b
+row_red: dw 0000000000000001b
+row_green: dw 0000000000000010b
+row_blue: dw 0000000000000100b
.segment program1
ld ra, 2 # LED on duration
- ld rb, 10 # LED off duration
+ ld rb, 2 # LED off duration
mux_map_addr row_red
- trigger w{e}
loop:
- trigger s{e}
- ld rc, 98 ; red intensity
+ ld rc, 180 ; red intensity
set_pwm rc
mux_map_addr row_green
- ld rc, 0 ; green intensity
+ ld rc, 80 ; green intensity
set_pwm rc
mux_map_addr row_blue
- ld rc, 234 ; blue intensity
+ ld rc, 0 ; blue intensity
set_pwm rc
wait1:
wait 0.1
branch ra, wait1
- trigger s{e}
set_pwm 0
mux_map_addr row_green
set_pwm 0
@@ -158,203 +145,82 @@ wait2:
wait 0.1
branch rb, wait2
branch 0, loop
-
-.segment program2
- end
-
-.segment program3
- end*/
-/*
- * blink_solid2.src
-
-row_red: dw 0000000001001001b
-row_green: dw 0000000010010010b
-row_blue: dw 0000000100100100b
-
-.segment program1
- ld ra, 98
- ld rb, 0
- ld rc, 234
- trigger s{e}
- mux_map_addr row_red
-loop:
- trigger w{e}
- set_pwm ra ; red intensity
- mux_map_addr row_green
- set_pwm rb ; green intensity
- mux_map_addr row_blue
- set_pwm rc ; blue intensity
-wait1:
- wait 0.1
- branch 1, wait1
- trigger w{e}
- set_pwm 0
- mux_map_addr row_green
- set_pwm 0
- mux_map_addr row_red
- set_pwm 0
-wait2:
- wait 0.1
- branch 1, wait2
- branch 0, loop
-
.segment program2
end
-
.segment program3
end
*/
static const uint8_t blink_wipeout1_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x90, 0x02,
- 0x94, 0x02, 0x9f, 0x80, 0xf0, 0x00, 0xe0, 0x40,
- 0x98, 255, 0x84, 0x62, 0x9f, 0x81, 0x98, 80,
- 0x84, 0x62, 0x9f, 0x82, 0x98, 0, 0x84, 0x62,
- 0x4c, 0x00, 0x86, 0x34, 0xe0, 0x40, 0x40, 0x00,
- 0x9f, 0x81, 0x40, 0x00, 0x9f, 0x80, 0x40, 0x00,
- 0x4c, 0x00, 0x86, 0x55, 0xa0, 0x04, 0xc0, 0x00,
- 0xc0, 0x00, 0x00,
-};
-
-static const uint8_t blink_wipeout2_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x90, 255,
- 0x94, 80, 0x98, 0, 0xe0, 0x40, 0x9f, 0x80,
- 0xf0, 0x00, 0x84, 0x60, 0x9f, 0x81, 0x84, 0x61,
- 0x9f, 0x82, 0x84, 0x62, 0x4c, 0x00, 0xa0, 0x8b,
- 0xf0, 0x00, 0x40, 0x00, 0x9f, 0x81, 0x40, 0x00,
- 0x9f, 0x80, 0x40, 0x00, 0x4c, 0x00, 0xa0, 0x93,
- 0xa0, 0x05, 0xc0, 0x00, 0xc0, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x90, 0x02,
+ 0x94, 0x02, 0x9f, 0x80, 0x98, 180, 0x84, 0x62,
+ 0x9f, 0x81, 0x98, 80, 0x84, 0x62, 0x9f, 0x82,
+ 0x98, 0, 0x84, 0x62, 0x4c, 0x00, 0x86, 0x2c,
+ 0x40, 0x00, 0x9f, 0x81, 0x40, 0x00, 0x9f, 0x80,
+ 0x40, 0x00, 0x4c, 0x00, 0x86, 0x49, 0xa0, 0x03,
+ 0xc0, 0x00, 0xc0, 0x00, 0x00,
};
static const TiLp55231Program blink_wipeout1_program = {
blink_wipeout1_text,
sizeof(blink_wipeout1_text),
0,
- { 3, 27, 28, }
-};
-static const TiLp55231Program blink_wipeout2_program = {
- blink_wipeout2_text,
- sizeof(blink_wipeout2_text),
- 0,
- { 3, 26, 26, }
+ { 3, 24, 25, }
};
static const uint8_t blink_recovery1_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x90, 0x02,
- 0x94, 0x02, 0x9f, 0x80, 0xf0, 0x00, 0xe0, 0x40,
- 0x98, 255, 0x84, 0x62, 0x9f, 0x81, 0x98, 24,
- 0x84, 0x62, 0x9f, 0x82, 0x98, 0, 0x84, 0x62,
- 0x4c, 0x00, 0x86, 0x34, 0xe0, 0x40, 0x40, 0x00,
- 0x9f, 0x81, 0x40, 0x00, 0x9f, 0x80, 0x40, 0x00,
- 0x4c, 0x00, 0x86, 0x55, 0xa0, 0x04, 0xc0, 0x00,
- 0xc0, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x90, 0x02,
+ 0x94, 0x02, 0x9f, 0x80, 0x98, 255, 0x84, 0x62,
+ 0x9f, 0x81, 0x98, 50, 0x84, 0x62, 0x9f, 0x82,
+ 0x98, 0, 0x84, 0x62, 0x4c, 0x00, 0x86, 0x2c,
+ 0x40, 0x00, 0x9f, 0x81, 0x40, 0x00, 0x9f, 0x80,
+ 0x40, 0x00, 0x4c, 0x00, 0x86, 0x49, 0xa0, 0x03,
+ 0xc0, 0x00, 0xc0, 0x00, 0x00,
};
static const TiLp55231Program blink_recovery1_program = {
blink_recovery1_text,
sizeof(blink_recovery1_text),
0,
- { 3, 27, 28, }
-};
-static const uint8_t blink_recovery2_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x90, 255,
- 0x94, 24, 0x98, 0, 0xe0, 0x40, 0x9f, 0x80,
- 0xf0, 0x00, 0x84, 0x60, 0x9f, 0x81, 0x84, 0x61,
- 0x9f, 0x82, 0x84, 0x62, 0x4c, 0x00, 0xa0, 0x8b,
- 0xf0, 0x00, 0x40, 0x00, 0x9f, 0x81, 0x40, 0x00,
- 0x9f, 0x80, 0x40, 0x00, 0x4c, 0x00, 0xa0, 0x93,
- 0xa0, 0x05, 0xc0, 0x00, 0xc0, 0x00, 0x00,
-};
-static const TiLp55231Program blink_recovery2_program = {
- blink_recovery2_text,
- sizeof(blink_recovery2_text),
- 0,
- { 3, 26, 26, }
+ { 3, 24, 25, }
};
/*
* fade_in1.src
*
- row_red: dw 0000000001001001b
- row_green: dw 0000000010010010b
- row_blue: dw 0000000100100100b
+ row_red: dw 0000000000000001b
+ row_green: dw 0000000000000010b
+ row_blue: dw 0000000000000100b
.segment program1
mux_map_addr row_red
- set_pwm 0h
- trigger w{e}
+ set_pwm 1h
trigger s{2|3}
end
-
.segment program2
mux_map_addr row_green
set_pwm 0h
-
trigger w{1}
- ramp 2, 87
+ ramp 2, 50
end
-
.segment program3
mux_map_addr row_blue
set_pwm 0h
loop3: trigger w{1}
- ramp 2, 155
- end
-*/
-/*
- * fade_in2.src
- *
- row_red: dw 0000000001001001b
- row_green: dw 0000000010010010b
- row_blue: dw 0000000100100100b
-
- .segment program1
- mux_map_addr row_red
- set_pwm 0h
- trigger s{e}
- trigger s{2|3}
- end
-
- .segment program2
- mux_map_addr row_green
- set_pwm 0h
-
- trigger w{1}
- ramp 2, 87
- end
-
-.segment program3
- mux_map_addr row_blue
- set_pwm 0h
- loop3: trigger w{1}
- ramp 2, 155
+ ramp 2, 255
end
*/
static const uint8_t fade_in1_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x9f, 0x80,
- 0x40, 0x00, 0xf0, 0x00, 0xe0, 0x0c, 0xc0, 0x00,
- 0x9f, 0x81, 0x40, 0x00, 0xe0, 0x80, 0x42, 0x57,
- 0xc0, 0x00, 0x9f, 0x82, 0x40, 0x00, 0xe0, 0x80,
- 0x34, 0x9b, 0xc0, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x9f, 0x80,
+ 0x40, 0x01, 0xe0, 0x0c, 0xc0, 0x00, 0x9f, 0x81,
+ 0x40, 0x00, 0xe0, 0x80, 0x46, 0x32, 0xc0, 0x00,
+ 0x9f, 0x82, 0x40, 0x00, 0xe0, 0x80, 0x20, 0xff,
+ 0xc0, 0x00, 0x00,
};
static const TiLp55231Program fade_in1_program = {
fade_in1_text,
sizeof(fade_in1_text),
0,
- { 3, 8, 13, }
-};
-
-static const uint8_t fade_in2_text[] = {
- 0x00, 0x49, 0x00, 0x92, 0x01, 0x24, 0x9f, 0x80,
- 0x40, 0x00, 0xe0, 0x40, 0xe0, 0x0c, 0xc0, 0x00,
- 0x9f, 0x81, 0x40, 0x00, 0xe0, 0x80, 0x42, 0x57,
- 0xc0, 0x00, 0x9f, 0x82, 0x40, 0x00, 0xe0, 0x80,
- 0x34, 0x9b, 0xc0, 0x00, 0x00,
-};
-static const TiLp55231Program fade_in2_program = {
- fade_in2_text,
- sizeof(fade_in2_text),
- 0,
- { 3, 8, 13, }
+ { 3, 7, 12, }
};
const WwRingStateProg wwr_state_programs[] = {
@@ -362,12 +228,10 @@ const WwRingStateProg wwr_state_programs[] = {
* for test purposes the blank screen program is set to blinking, will
* be changed soon.
*/
- {WWR_ALL_OFF, {&solid_000000_program, &solid_000000_program} },
- {WWR_RECOVERY_PUSHED, {&solid_808080_program, &solid_808080_program} },
- {WWR_WIPEOUT_REQUEST, {&blink_wipeout1_program,
- &blink_wipeout2_program} },
- {WWR_RECOVERY_REQUEST, {&blink_recovery1_program,
- &blink_recovery2_program} },
- {WWR_NORMAL_BOOT, {&fade_in1_program, &fade_in2_program} },
+ {WWR_ALL_OFF, {&solid_000000_program} },
+ {WWR_RECOVERY_PUSHED, {&solid_808080_program} },
+ {WWR_WIPEOUT_REQUEST, {&blink_wipeout1_program} },
+ {WWR_RECOVERY_REQUEST, {&blink_recovery1_program} },
+ {WWR_NORMAL_BOOT, {&fade_in1_program} },
{}, /* Empty record to mark the end of the table. */
};
diff --git a/src/drivers/i2c/ww_ring/ww_ring_programs.h b/src/drivers/i2c/ww_ring/ww_ring_programs.h
index 9f4b928941..5fb8ebf68f 100644
--- a/src/drivers/i2c/ww_ring/ww_ring_programs.h
+++ b/src/drivers/i2c/ww_ring/ww_ring_programs.h
@@ -36,7 +36,7 @@
#define LP55231_NUM_OF_ENGINES 3
/* Number of lp55321 controllers on the ring */
-#define WW_RING_NUM_LED_CONTROLLERS 2
+#define WW_RING_NUM_LED_CONTROLLERS 1
/*
* Structure to describe an lp55231 program: pointer to the text of the