1
From ab59f6eaacdee6169d616eb093b45ad80743edad Mon Sep 17 00:00:00 2001
2
From: Peter Maydell <peter.maydell@linaro.org>
3
Date: Mon, 18 Feb 2013 16:58:32 +0000
4
Subject: [PATCH 52/71] hw/nseries.c: Add support for n900 MIPID
6
NB: a few of these change the not-n900 behaviour slightly,
9
hw/arm/nseries.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
10
1 file changed, 93 insertions(+), 5 deletions(-)
12
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
13
index 2c9cfa5..306cb30 100644
14
--- a/hw/arm/nseries.c
15
+++ b/hw/arm/nseries.c
16
@@ -427,6 +427,11 @@ struct mipid_s {
27
static void mipid_reset(DeviceState *qdev)
28
@@ -457,6 +462,11 @@ static uint32_t mipid_txrx(SPIDevice *spidev, uint32_t cmd, int len)
29
struct mipid_s *s = FROM_SPI_DEVICE(struct mipid_s, spidev);
32
+ if (s->n900 && len == 10) {
38
hw_error("%s: FIXME: bad SPI word width %i\n", __FUNCTION__, len);
40
@@ -648,13 +658,87 @@ static uint32_t mipid_txrx(SPIDevice *spidev, uint32_t cmd, int len)
42
case 0x38: /* IDMOFF */
43
case 0x39: /* IDMON */
44
- case 0x3a: /* COLMOD */
45
+ TRACE_MIPID("IDMON/OFF");
48
+ case 0x3a: /* COLMOD */
50
+ TRACE_MIPID("COLMOD 0x%02x", s->param[0] & 0xff);
51
+ } else if (s->pm < 0) {
56
+ case 0x51: /* WRITE_BRIGHTNESS */
59
+ s->brightness = s->param[0] & 0xff;
60
+ TRACE_MIPID("WRITE_BRIGHTNESS 0x%02x", s->brightness);
61
+ } else if (s->pm < 0) {
68
+ case 0x52: /* READ_BRIGHTNESS */
71
+ s->resp[0] = s->brightness;
72
+ TRACE_MIPID("READ_BRIGHTNESS 0x%02x", s->resp[0]);
77
+ case 0x53: /* WRITE_CTRL */
80
+ s->ctrl = s->param[0] & 0xff;
81
+ TRACE_MIPID("WRITE_CTRL 0x%02x", s->ctrl);
82
+ } else if (s->pm < 0) {
89
+ case 0x54: /* READ_CTRL */
92
+ s->resp[0] = s->ctrl;
93
+ TRACE_MIPID("READ_CTRL 0x%02x", s->resp[0]);
98
+ case 0x55: /* WRITE_CABC */
101
+ s->cabc = s->param[0] & 0xff;
102
+ TRACE_MIPID("WRITE_CABC 0x%02x", s->cabc);
103
+ } else if (s->pm < 0) {
110
+ case 0x56: /* READ_CABC */
113
+ s->resp[0] = s->cabc;
114
+ TRACE_MIPID("READ_CABC 0x%02x", s->resp[0]);
120
case 0xb0: /* CLKINT / DISCTL */
121
case 0xb1: /* CLKEXT */
124
+ TRACE_MIPID("CLKINT/EXT");
125
+ } else if (s->pm < 0) {
130
case 0xb4: /* FRMSEL */
131
@@ -677,8 +761,11 @@ static uint32_t mipid_txrx(SPIDevice *spidev, uint32_t cmd, int len)
134
case 0xc2: /* IFMOD */
138
+ TRACE_MIPID("IFMOD");
139
+ } else if (s->pm < 0) {
140
+ s->pm = (s->n900) ? 3 : 2;
144
case 0xc6: /* PWRCTL */
145
@@ -722,6 +809,7 @@ static int mipid_init(SPIDevice *spidev)
147
static Property mipid_properties[] = {
148
DEFINE_PROP_UINT32("id", struct mipid_s, id, 0),
149
+ DEFINE_PROP_UINT8("n900", struct mipid_s, n900, 0),
150
DEFINE_PROP_END_OF_LIST()