From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KwfVi-0006TP-H3 for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:09:06 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KwfVh-0006Si-JK for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:09:05 -0500 Received: from [199.232.76.173] (port=47853 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KwfVh-0006SX-Em for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:09:05 -0500 Received: from rv-out-0708.google.com ([209.85.198.243]:4991) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KwfVh-00033U-0C for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:09:05 -0500 Received: by rv-out-0708.google.com with SMTP id f25so1913695rvb.22 for ; Sun, 02 Nov 2008 08:09:04 -0800 (PST) Message-ID: Date: Sun, 2 Nov 2008 17:09:04 +0100 From: "andrzej zaborowski" Subject: Re: [Qemu-devel] [PATCH] tosa: basic lcd support In-Reply-To: <1225631790-15735-4-git-send-email-dbaryshkov@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <1225631790-15735-1-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-2-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-3-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-4-git-send-email-dbaryshkov@gmail.com> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Dmitry Baryshkov 2008/11/2 Dmitry Baryshkov : > Signed-off-by: Dmitry Baryshkov > --- > hw/tosa.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 74 insertions(+), 0 deletions(-) > > diff --git a/hw/tosa.c b/hw/tosa.c > index e629044..cb0e1da 100644 > --- a/hw/tosa.c > +++ b/hw/tosa.c > @@ -17,6 +17,7 @@ > #include "pcmcia.h" > #include "block.h" > #include "boards.h" > +#include "i2c.h" > > #define TOSA_RAM 0x04000000 > #define TOSA_ROM 0x00800000 > @@ -38,6 +39,11 @@ > #define TOSA_GPIO_CHRG_ERR_LED (TOSA_SCOOP_JC_GPIO_BASE + 2) > #define TOSA_GPIO_WLAN_LED (TOSA_SCOOP_JC_GPIO_BASE + 7) > > +#define DAC_BASE 0x4e > +#define DAC_CH1 0 > +#define DAC_CH2 1 > + > + > static void tosa_microdrive_attach(struct pxa2xx_state_s *cpu) > { > struct pcmcia_card_s *md; > @@ -104,6 +110,72 @@ static void tosa_gpio_setup(struct pxa2xx_state_s *cpu, > scoop_gpio_out_set(scp1, TOSA_GPIO_WLAN_LED, outsignals[3]); > } > > +static uint32_t tosa_ssp_read(void *opaque) { > + return 0; > +} > + > +static void tosa_ssp_write(void *opaque, uint32_t value) > +{ > + fprintf(stderr, "TG: %d %02x\n", value >> 5, value & 0x1f); > +} > + > +struct tosa_dac_i2c { > + i2c_slave i2c; > + int len; > + char buf[3]; > +}; > + > +static int tosa_dac_send(i2c_slave *i2c, uint8_t data) > +{ > + struct tosa_dac_i2c *s = (struct tosa_dac_i2c *)i2c; > + s->buf[s->len] = data; > + if (s->len ++ > 2) { > +#ifdef VERBOSE > + fprintf(stderr, "%s: message too long (%i bytes)\n", __FUNCTION__, s->len); > +#endif > + return 1; > + } > + > + if (s->len == 2) { > + fprintf(stderr, "dac: channel %d value 0x%02x\n", > + s->buf[0], s->buf[1]); > + } > + > + return 0; > +} > + > +static void tosa_dac_event(i2c_slave *i2c, enum i2c_event event) > +{ > + struct tosa_dac_i2c *s = (struct tosa_dac_i2c *)i2c; > + s->len = 0; > + switch (event) { > + case I2C_START_SEND: > + break; > + case I2C_FINISH: > +#ifdef VERBOSE > + if (s->len < 2) > + printf("%s: message too short (%i bytes)\n", __FUNCTION__, s->len); > + if (s->len > 2) > + printf("%s: message too long\n", __FUNCTION__); > +#endif > + break; > + default: > + break; > + } > +} > + > +static void tosa_tg_init(struct pxa2xx_state_s *cpu) > +{ > + struct i2c_bus *bus = pxa2xx_i2c_bus(cpu->i2c[0]); > + struct i2c_slave *dac = i2c_slave_init(bus, 0, sizeof(struct tosa_dac_i2c)); > + dac->send = tosa_dac_send; > + dac->event = tosa_dac_event; You should set also .recv to not leave the kernel a possibility to crash qemu. Other than this, looks okay, but does this code help emulation in anyway? I suppose the kernel wants to see some i2c device present? Cheers