11.1Srkujawa/* $NetBSD: flipper.c,v 1.1 2012/11/08 18:30:21 rkujawa Exp $ */ 21.1Srkujawa 31.1Srkujawa/*- 41.1Srkujawa * Copyright (c) 2012 The NetBSD Foundation, Inc. 51.1Srkujawa * All rights reserved. 61.1Srkujawa * 71.1Srkujawa * This code is derived from software contributed to The NetBSD Foundation 81.1Srkujawa * by Radoslaw Kujawa. 91.1Srkujawa * 101.1Srkujawa * Redistribution and use in source and binary forms, with or without 111.1Srkujawa * modification, are permitted provided that the following conditions 121.1Srkujawa * are met: 131.1Srkujawa * 1. Redistributions of source code must retain the above copyright 141.1Srkujawa * notice, this list of conditions and the following disclaimer. 151.1Srkujawa * 2. Redistributions in binary form must reproduce the above copyright 161.1Srkujawa * notice, this list of conditions and the following disclaimer in the 171.1Srkujawa * documentation and/or other materials provided with the distribution. 181.1Srkujawa * 191.1Srkujawa * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 201.1Srkujawa * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 211.1Srkujawa * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 221.1Srkujawa * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 231.1Srkujawa * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 241.1Srkujawa * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 251.1Srkujawa * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 261.1Srkujawa * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 271.1Srkujawa * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 281.1Srkujawa * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 291.1Srkujawa * POSSIBILITY OF SUCH DAMAGE. 301.1Srkujawa */ 311.1Srkujawa 321.1Srkujawa/* Driver for Individual Computers Delfina Flipper / Petsoff Delfina 1200. 331.1Srkujawa * 341.1Srkujawa * TODO: 351.1Srkujawa * - linux-style /dev/dsp56k interface 361.1Srkujawa * - audio 371.1Srkujawa * - firmware 381.1Srkujawa * - interrupts: caa->cp_intr_establish(dspintr, sc); 391.1Srkujawa */ 401.1Srkujawa 411.1Srkujawa#include <sys/cdefs.h> 421.1Srkujawa 431.1Srkujawa#include <sys/param.h> 441.1Srkujawa#include <sys/device.h> 451.1Srkujawa 461.1Srkujawa#include <sys/bus.h> 471.1Srkujawa 481.1Srkujawa#include <amiga/clockport/clockportvar.h> 491.1Srkujawa 501.1Srkujawa#include <amiga/clockport/flipperreg.h> 511.1Srkujawa#include <amiga/clockport/flippervar.h> 521.1Srkujawa 531.1Srkujawa#define FLIPPER_DEBUG 1 541.1Srkujawa 551.1Srkujawastatic int flipper_probe(device_t, cfdata_t , void *); 561.1Srkujawastatic void flipper_attach(device_t, device_t, void *); 571.1Srkujawa 581.1SrkujawaCFATTACH_DECL_NEW(flipper, sizeof(struct flipper_softc), 591.1Srkujawa flipper_probe, flipper_attach, NULL, NULL); 601.1Srkujawa 611.1Srkujawastatic int 621.1Srkujawaflipper_probe(device_t parent, cfdata_t cf, void *aux) 631.1Srkujawa{ 641.1Srkujawa struct clockport_attach_args *caa = aux; 651.1Srkujawa uint8_t delfinaver; 661.1Srkujawa bus_space_handle_t ioh; 671.1Srkujawa 681.1Srkujawa bus_space_map(caa->cp_iot, 0, FLIPPER_REGSIZE, 0, &ioh); 691.1Srkujawa 701.1Srkujawa delfinaver = bus_space_read_1(caa->cp_iot, ioh, FLIPPER_HOSTCTL); 711.1Srkujawa#ifdef FLIPPER_DEBUG 721.1Srkujawa aprint_normal("flipper: hostctl probe read %x\n", delfinaver); 731.1Srkujawa#endif /* FLIPPER_DEBUG */ 741.1Srkujawa 751.1Srkujawa bus_space_unmap(caa->cp_iot, ioh, FLIPPER_REGSIZE); 761.1Srkujawa 771.1Srkujawa if ((delfinaver == 0xB5) || (delfinaver == 0xB6)) 781.1Srkujawa return 1; 791.1Srkujawa 801.1Srkujawa return 0; 811.1Srkujawa} 821.1Srkujawa 831.1Srkujawastatic void 841.1Srkujawaflipper_attach(device_t parent, device_t self, void *aux) 851.1Srkujawa{ 861.1Srkujawa struct flipper_softc *sc = device_private(self); 871.1Srkujawa struct clockport_attach_args *caa = aux; 881.1Srkujawa sc->sc_dev = self; 891.1Srkujawa sc->sc_iot = caa->cp_iot; 901.1Srkujawa 911.1Srkujawa if (bus_space_map(sc->sc_iot, 0, FLIPPER_REGSIZE, 0, &sc->sc_ioh)) { 921.1Srkujawa aprint_normal("can't map the bus space\n"); 931.1Srkujawa return; 941.1Srkujawa } 951.1Srkujawa 961.1Srkujawa sc->sc_delfinaver = bus_space_read_1(sc->sc_iot, sc->sc_ioh, 971.1Srkujawa FLIPPER_HOSTCTL); 981.1Srkujawa 991.1Srkujawa switch (sc->sc_delfinaver) { 1001.1Srkujawa case DELFINA_FLIPPER: 1011.1Srkujawa aprint_normal(": Individual Computers Delfina Flipper\n"); 1021.1Srkujawa break; 1031.1Srkujawa case DELFINA_1200: 1041.1Srkujawa aprint_normal(": Petsoff Delfina 1200\n"); 1051.1Srkujawa break; 1061.1Srkujawa default: 1071.1Srkujawa aprint_normal(": unknown model\n"); 1081.1Srkujawa return; 1091.1Srkujawa } 1101.1Srkujawa 1111.1Srkujawa /* reset the board */ 1121.1Srkujawa bus_space_write_1(sc->sc_iot, sc->sc_ioh, FLIPPER_HOSTCTL, 1131.1Srkujawa FLIPPER_HOSTCTL_RESET | FLIPPER_HOSTCTL_IRQDIS); 1141.1Srkujawa delay(10000); 1151.1Srkujawa bus_space_write_1(sc->sc_iot, sc->sc_ioh, FLIPPER_HOSTCTL, 1161.1Srkujawa FLIPPER_HOSTCTL_IRQDIS); /* leave interrupts disabled for now */ 1171.1Srkujawa 1181.1Srkujawa /* attach dsp56k, audio, etc. */ 1191.1Srkujawa} 1201.1Srkujawa 121