Esempio n. 1
0
static void
spic_acpi_attach(device_t parent, device_t self, void *aux)
{
	struct spic_acpi_softc *sc = device_private(self);
	struct acpi_attach_args *aa = aux;
	struct acpi_io *io;
	struct acpi_irq *irq;
	struct acpi_resources res;

	ACPI_STATUS rv;

	aprint_naive(": Sony Programmable I/O Controller\n");
	aprint_normal(": Sony Programmable I/O Controller\n");

	sc->sc_spic.sc_dev = self;
	sc->sc_node = aa->aa_node;

	/* Parse our resources. */
	rv = acpi_resource_parse(self, sc->sc_node->ad_handle,
	    "_CRS", &res, &acpi_resource_parse_ops_default);
	if (ACPI_FAILURE(rv))
		return;

	sc->sc_spic.sc_iot = aa->aa_iot;
	io = acpi_res_io(&res, 0);
	if (io == NULL) {
		aprint_error_dev(self, "unable to find io resource\n");
		goto out;
	}
	if (bus_space_map(sc->sc_spic.sc_iot, io->ar_base, io->ar_length,
	    0, &sc->sc_spic.sc_ioh) != 0) {
		aprint_error_dev(self, "unable to map data register\n");
		goto out;
	}
	irq = acpi_res_irq(&res, 0);
	if (irq == NULL) {
		aprint_error_dev(self, "unable to find irq resource\n");
		/* XXX unmap */
		goto out;
	}
#if 0
	sc->sc_ih = isa_intr_establish(NULL, irq->ar_irq,
	    IST_EDGE, IPL_TTY, spic_intr, sc);
#endif

	if (!pmf_device_register(self, spic_suspend, spic_resume))
		aprint_error_dev(self, "couldn't establish power handler\n");
	else
		pmf_class_input_register(self);

	spic_attach(&sc->sc_spic);
 out:
	acpi_resource_cleanup(&res);
}
Esempio n. 2
0
void
spic_acpi_attach(struct device *parent, struct device *self, void *aux)
{
	struct spic_acpi_softc *sc = (void *) self;
	struct acpi_attach_args *aa = aux;
	struct acpi_io *io;
	struct acpi_irq *irq;
	ACPI_STATUS rv;

	printf(": Sony Programmable I/O Controller\n");

	sc->sc_node = aa->aa_node;

	/* Parse our resources. */
	rv = acpi_resource_parse(&sc->sc_spic.sc_dev, sc->sc_node, &sc->sc_res,
	    &acpi_resource_parse_ops_default);
	if (ACPI_FAILURE(rv))
		return;

	sc->sc_spic.sc_iot = aa->aa_iot;
	io = acpi_res_io(&sc->sc_res, 0);
	if (io == NULL) {
		printf("%s: unable to find io resource\n",
		    sc->sc_spic.sc_dev.dv_xname);
		return;
	}
	if (bus_space_map(sc->sc_spic.sc_iot, io->ar_base, io->ar_length,
	    0, &sc->sc_spic.sc_ioh) != 0) {
		printf("%s: unable to map data register\n",
		    sc->sc_spic.sc_dev.dv_xname);
		return;
	}
	irq = acpi_res_irq(&sc->sc_res, 0);
	if (irq == NULL) {
		printf("%s: unable to find irq resource\n",
		    sc->sc_spic.sc_dev.dv_xname);
		/* XXX unmap */
		return;
	}
#if 0
	sc->sc_ih = isa_intr_establish(NULL, irq->ar_irq,
	    IST_EDGE, IPL_TTY, spic_intr, sc);
#endif

	spic_attach(&sc->sc_spic);
}