Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/hpcarm moved sa11x0_lcd* to dev/ipaq_lcd*
details: https://anonhg.NetBSD.org/src/rev/ae6dfb79140d
branches: trunk
changeset: 512593:ae6dfb79140d
user: ichiro <ichiro%NetBSD.org@localhost>
date: Tue Jul 10 18:09:31 2001 +0000
description:
moved sa11x0_lcd* to dev/ipaq_lcd*
diffstat:
sys/arch/hpcarm/dev/ipaq_lcd.c | 399 +++++++++++++++++++++++++++++++++
sys/arch/hpcarm/dev/ipaq_lcdreg.h | 125 ++++++++++
sys/arch/hpcarm/dev/ipaq_lcdvar.h | 54 ++++
sys/arch/hpcarm/sa11x0/sa11x0_lcd.c | 395 --------------------------------
sys/arch/hpcarm/sa11x0/sa11x0_lcdreg.h | 125 ----------
sys/arch/hpcarm/sa11x0/sa11x0_lcdvar.h | 54 ----
6 files changed, 578 insertions(+), 574 deletions(-)
diffs (truncated from 1176 to 300 lines):
diff -r cb150becbce6 -r ae6dfb79140d sys/arch/hpcarm/dev/ipaq_lcd.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/hpcarm/dev/ipaq_lcd.c Tue Jul 10 18:09:31 2001 +0000
@@ -0,0 +1,399 @@
+/* $NetBSD: ipaq_lcd.c,v 1.1 2001/07/10 18:09:33 ichiro Exp $ */
+#define IPAQ_LCD_DEBUG
+
+/*
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Ichiro FUKUHARA (ichiro%ichiro.org@localhost).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/time.h>
+#include <sys/device.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <dev/wscons/wsconsio.h>
+
+#include <machine/bootinfo.h>
+#include <machine/bus.h>
+#include <machine/irqhandler.h>
+#include <machine/cpufunc.h>
+#include <machine/katelib.h>
+
+#include <hpcarm/sa11x0/sa11x0_reg.h>
+#include <hpcarm/sa11x0/sa11x0_gpioreg.h>
+
+#include <hpcarm/dev/ipaq_gpioreg.h>
+#include <hpcarm/dev/ipaq_saipvar.h>
+#include <hpcarm/dev/ipaq_lcdreg.h>
+#include <hpcarm/dev/ipaq_lcdvar.h>
+
+#ifdef IPAQ_LCD_DEBUG
+#define DPRINTFN(n, x) if (ipaqlcddebug > (n)) printf x
+int ipaqlcddebug = 0xff;
+#else
+#define DPRINTFN(n, x)
+#endif
+#define DPRINTF(x) DPRINTFN(0, x)
+
+static int ipaqlcd_match(struct device *, struct cfdata *, void *);
+static void ipaqlcd_attach(struct device *, struct device *, void *);
+static void ipaqlcd_init(struct ipaqlcd_softc *);
+static int ipaqlcd_fbinit(struct ipaqlcd_softc *);
+static int ipaqlcd_ioctl(void *, u_long, caddr_t, int, struct proc *);
+static paddr_t ipaqlcd_mmap(void *, off_t offset, int);
+
+#if defined __mips__ || defined __sh__ || defined __arm__
+#define __BTOP(x) ((paddr_t)(x) >> PGSHIFT)
+#define __PTOB(x) ((paddr_t)(x) << PGSHIFT)
+#else
+#error "define btop, ptob."
+#endif
+
+struct cfattach ipaqlcd_ca = {
+ sizeof(struct ipaqlcd_softc), ipaqlcd_match, ipaqlcd_attach
+};
+
+struct hpcfb_accessops ipaqlcd_ha = {
+ ipaqlcd_ioctl, ipaqlcd_mmap
+};
+static int console_flag = 0;
+
+static int
+ipaqlcd_match(parent, match, aux)
+ struct device *parent;
+ struct cfdata *match;
+ void *aux;
+{
+ return (1);
+}
+
+void
+ipaqlcd_attach(parent, self, aux)
+ struct device *parent;
+ struct device *self;
+ void *aux;
+{
+ struct ipaqlcd_softc *sc = (struct ipaqlcd_softc*)self;
+ struct hpcfb_attach_args ha;
+ struct ipaq_softc *psc = (struct ipaq_softc *)parent;
+
+ sc->sc_iot = psc->sc_iot;
+ sc->sc_parent = (struct ipaq_softc *)parent;
+
+ ipaqlcd_init(sc);
+ ipaqlcd_fbinit(sc);
+
+ printf("\n");
+ printf("%s: iPAQ internal LCD controller\n", sc->sc_dev.dv_xname);
+
+ DPRINTF(("framebuffer_baseaddr=%lx\n", (u_long)bootinfo->fb_addr));
+
+ ha.ha_console = console_flag;
+ ha.ha_accessops = &ipaqlcd_ha;
+ ha.ha_accessctx = sc;
+ ha.ha_curfbconf = 0;
+ ha.ha_nfbconf = 1;
+ ha.ha_fbconflist = &sc->sc_fbconf;
+ ha.ha_curdspconf = 0;
+ ha.ha_ndspconf = 1;
+ ha.ha_dspconflist = &sc->sc_dspconf;
+
+ config_found(&sc->sc_dev, &ha, hpcfbprint);
+}
+
+void
+ipaqlcd_init(sc)
+ struct ipaqlcd_softc *sc;
+{
+#if 0
+ /* Initialization of Extended GPIO */
+ bus_space_write_4(sc->sc_iot, sc->sc_parent->sc_egpioh,
+ 0, EGPIO_LCD_INIT);
+#endif
+
+ if (bus_space_map(sc->sc_iot, SALCD_BASE, SALCD_NPORTS,
+ 0, &sc->sc_ioh))
+ panic("ipaqlcd_init:Cannot map registers\n");
+
+ (u_long)bootinfo->fb_addr =
+ bus_space_read_4(sc->sc_iot, sc->sc_ioh, SALCD_BA1);
+
+ /*
+ * Initialize LCD Control Register 0 - 3
+ * must initialize DMA Channel Base Address Register
+ * before enabling LCD(LEN = 1)
+ */
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh,
+ SALCD_CR1, IPAQ_LCCR1);
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh,
+ SALCD_CR2, IPAQ_LCCR2);
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh,
+ SALCD_CR3, IPAQ_LCCR3);
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh,
+ SALCD_CR0, IPAQ_LCCR0);
+
+ DPRINTF(("DMA_BASE= %08x : DMA_CUR = %08x \n"
+ "LCCR0 = %08x : LCCR1 = %08x \n"
+ "LCCR2 = %08x : LCCR3 = %08x",
+ bus_space_read_4(sc->sc_iot, sc->sc_ioh, SALCD_BA1),
+ bus_space_read_4(sc->sc_iot, sc->sc_ioh, SALCD_CA1),
+ bus_space_read_4(sc->sc_iot, sc->sc_ioh, SALCD_CR0),
+ bus_space_read_4(sc->sc_iot, sc->sc_ioh, SALCD_CR1),
+ bus_space_read_4(sc->sc_iot, sc->sc_ioh, SALCD_CR2),
+ bus_space_read_4(sc->sc_iot, sc->sc_ioh, SALCD_CR3)));
+
+}
+
+int
+ipaqlcd_fbinit(sc)
+ struct ipaqlcd_softc *sc;
+{
+ struct hpcfb_fbconf *fb;
+
+ fb = &sc->sc_fbconf;
+
+ /* Initialize fb */
+ memset(fb, 0, sizeof(*fb));
+
+ fb->hf_conf_index = 0; /* configuration index */
+ fb->hf_nconfs = 1;
+ strcpy(fb->hf_name, "built-in video");
+ strcpy(fb->hf_conf_name, "LCD");
+ /* configuration name */
+ fb->hf_height = bootinfo->fb_height;
+ fb->hf_width = bootinfo->fb_width;
+
+ if (bus_space_map(sc->sc_iot, (bus_addr_t)bootinfo->fb_addr,
+ bootinfo->fb_height * bootinfo->fb_line_bytes,
+ 0, &fb->hf_baseaddr)) {
+ printf("unable to map framebuffer\n");
+ return (-1);
+ }
+
+ fb->hf_offset = (u_long)bootinfo->fb_addr -
+ __PTOB(__BTOP(bootinfo->fb_addr));
+ /* frame buffer start offset */
+ fb->hf_bytes_per_line = bootinfo->fb_line_bytes;
+ fb->hf_nplanes = 1;
+ fb->hf_bytes_per_plane = bootinfo->fb_height *
+ bootinfo->fb_line_bytes;
+
+ fb->hf_access_flags |= HPCFB_ACCESS_BYTE;
+ fb->hf_access_flags |= HPCFB_ACCESS_WORD;
+ fb->hf_access_flags |= HPCFB_ACCESS_DWORD;
+
+ switch (bootinfo->fb_type) {
+ /*
+ * gray scale
+ */
+ case BIFB_D2_M2L_3:
+ case BIFB_D2_M2L_3x2:
+ fb->hf_access_flags |= HPCFB_ACCESS_REVERSE;
+ case BIFB_D2_M2L_0:
+ case BIFB_D2_M2L_0x2:
+ fb->hf_class = HPCFB_CLASS_GRAYSCALE;
+ break;
+ case BIFB_D4_M2L_F:
+ case BIFB_D4_M2L_Fx2:
+ fb->hf_access_flags |= HPCFB_ACCESS_REVERSE;
+ case BIFB_D4_M2L_0:
+ case BIFB_D4_M2L_0x2:
+ fb->hf_class = HPCFB_CLASS_GRAYSCALE;
+ break;
+ /*
+ * indexed color
+ */
+ case BIFB_D8_FF:
+ case BIFB_D8_00:
+ fb->hf_offset = 0x200;
+ break;
+ /*
+ * RGB color
+ */
+ case BIFB_D16_FFFF:
+ case BIFB_D16_0000:
+ fb->hf_class = HPCFB_CLASS_RGBCOLOR;
+ fb->hf_access_flags |= HPCFB_ACCESS_STATIC;
+ fb->hf_pack_width = 16;
+ fb->hf_pixels_per_pack = 1;
+ fb->hf_pixel_width = 16;
+
+ fb->hf_class_data_length = sizeof(struct hf_rgb_tag);
+ fb->hf_u.hf_rgb.hf_flags = 0;
+ /* reserved for future use */
+ fb->hf_u.hf_rgb.hf_red_width = 5;
+ fb->hf_u.hf_rgb.hf_red_shift = 11;
+ fb->hf_u.hf_rgb.hf_green_width = 6;
+ fb->hf_u.hf_rgb.hf_green_shift = 5;
+ fb->hf_u.hf_rgb.hf_blue_width = 5;
+ fb->hf_u.hf_rgb.hf_blue_shift = 0;
+ fb->hf_u.hf_rgb.hf_alpha_width = 0;
+ fb->hf_u.hf_rgb.hf_alpha_shift = 0;
+ break;
+ default :
+ printf("unknown type (=%d).\n", bootinfo->fb_type);
+ return (-1);
+ break;
+ }
+
+ return(0);
+}
+
+int
+ipaqlcd_ioctl(v, cmd, data, flag, p)
+ void *v;
+ u_long cmd;
+ caddr_t data;
+ int flag;
+ struct proc *p;
+{
+ struct ipaqlcd_softc *sc = (struct ipaqlcd_softc *)v;
+ struct hpcfb_fbconf *fbconf;
+ struct hpcfb_dspconf *dspconf;
+ struct wsdisplay_cmap *cmap;
+ struct wsdisplay_param *dispparam;
+
+ switch (cmd) {
+ case WSDISPLAYIO_GETCMAP:
+ cmap = (struct wsdisplay_cmap*)data;
+
+ if (sc->sc_fbconf.hf_class != HPCFB_CLASS_INDEXCOLOR ||
+ sc->sc_fbconf.hf_pack_width != 8 ||
Home |
Main Index |
Thread Index |
Old Index