[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/1] add output register property and update the
From: |
Zhou Yuan |
Subject: |
Re: [Qemu-devel] [PATCH 1/1] add output register property and update the |
Date: |
Tue, 15 Oct 2013 15:35:11 +0800 |
From: Zhouy <address@hidden>
To: address@hidden
Date: Tue, 15 Oct 2013 15:20:47 -0400
Subject: Re: [PATCH 1/1] add output register property and update the
outputports level when necessary
I found some instruction of output port register in the datasheet:
" Reads from the output port register reflect the value that is in the flip-flop
controlling the output selection, not the actual I/O value, which may differ if
the out-put is overloaded."
So the level of output pins should be updated according to the "Output Register"
when “Configuration Register" is writen.
> qemu-master/hw/gpio/max7310.c | 33 ++++++++++++++++++++++-----------
> 1 files changed, 22 insertions(+), 11 deletions(-)
>
>diff --git a/qemu-master/hw/gpio/max7310.c b/qemu-master/hw/gpio/max7310.c
>index 59b2877..ffbeb6f 100644
>--- a/qemu-master/hw/gpio/max7310.c
>+++ b/qemu-master/hw/gpio/max7310.c
>@@ -19,10 +19,25 @@ typedef struct {
> uint8_t polarity;
> uint8_t status;
> uint8_t command;
>+ uint8_t output;
> qemu_irq handler[8];
> qemu_irq *gpio_in;
> } MAX7310State;
>
>+/*this function to update outputports level*/
>+static void max7310_update(MAX7310State *s)
>+{
>+ uint8_t diff = 0;
>+ uint8_t line = 0;
>+ for (diff = (s->output ^ s->level) & ~s->direction; diff;
>+ diff &= ~(1 << line)) {
>+ line = ffs(diff) - 1;
>+ if (s->handler[line]) {
>+ qemu_set_irq(s->handler[line], (s->output >> line) & 1);
>+ }
>+ }
>+ s->level = (s->level & s->direction) | (s->level & ~s->direction);
>+}
>+
> static void max7310_reset(DeviceState *dev)
> {
> MAX7310State *s = FROM_I2C_SLAVE(MAX7310State, I2C_SLAVE(dev));
>@@ -31,6 +46,8 @@ static void max7310_reset(DeviceState *dev)
> s->polarity = 0xf0;
> s->status = 0x01;
> s->command = 0x00;
>+ s->output = 0x00;
>+ max7310_update(s);
> }
>
> static int max7310_rx(I2CSlave *i2c)
>@@ -43,7 +60,7 @@ static int max7310_rx(I2CSlave *i2c)
> break;
>
> case 0x01: /* Output port */
>- return s->level & ~s->direction;
>+ return s->output;
> break;
>
> case 0x02: /* Polarity inversion */
>@@ -71,8 +88,6 @@ static int max7310_rx(I2CSlave *i2c)
> static int max7310_tx(I2CSlave *i2c, uint8_t data)
> {
> MAX7310State *s = (MAX7310State *) i2c;
>- uint8_t diff;
>- int line;
>
> if (s->len ++ > 1) {
> #ifdef VERBOSE
>@@ -89,13 +104,8 @@ static int max7310_tx(I2CSlave *i2c, uint8_t data)
>
> switch (s->command) {
> case 0x01: /* Output port */
>- for (diff = (data ^ s->level) & ~s->direction; diff;
>- diff &= ~(1 << line)) {
>- line = ffs(diff) - 1;
>- if (s->handler[line])
>- qemu_set_irq(s->handler[line], (data >> line) & 1);
>- }
>- s->level = (s->level & s->direction) | (data & ~s->direction);
>+ s->output = data;
>+ max7310_update(s);
> break;
>
> case 0x02: /* Polarity inversion */
>@@ -103,8 +113,8 @@ static int max7310_tx(I2CSlave *i2c, uint8_t data)
> break;
>
> case 0x03: /* Configuration */
>- s->level &= ~(s->direction ^ data);
> s->direction = data;
>+ max7310_update(s);
> break;
>
> case 0x04: /* Timeout */
>@@ -156,6 +166,7 @@ static const VMStateDescription vmstate_max7310 = {
> VMSTATE_UINT8(polarity, MAX7310State),
> VMSTATE_UINT8(status, MAX7310State),
> VMSTATE_UINT8(command, MAX7310State),
>+ VMSTATE_UINT8(output, MAX7310State),
> VMSTATE_I2C_SLAVE(i2c, MAX7310State),
> VMSTATE_END_OF_LIST()
> }
>--
>1.7.6
Ping,anyone?
--------------
A new email address of FJWAN is launched from Apr.1 2007.
The updated address is: address@hidden
--------------------------------------------------
Zhou Yuan
Nanjing Fujitsu Nanda Software Tech. Co., Ltd.(FNST)
No. 6 Wenzhu Road, Nanjing, 210012, China
TEL:+86+25-86630566-9555
FUJITSU INTERNAL:7998-9555
FAX:+86+25-83317685
EMail:address@hidden
--------------------------------------------------
This communication is for use by the intended recipient(s) only and may contain
information that is privileged, confidential and exempt from disclosure under
applicable law. If you are not an intended recipient of this communication, you
are hereby notified that any dissemination, distribution or copying hereof is
strictly prohibited. If you have received this communication in error, please
notify me by reply e-mail, permanently delete this communication from your
system, and destroy any hard copies you may have printed.
address@hidden
15:14:50
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH 1/1] add output register property and update the,
Zhou Yuan <=