mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-24 16:10:11 +00:00
[ig4] Do not wait until interrupts are enabled at attach stage
as the driver is fully functional on a cold boot through utilization of polled mode. As a side effect, ig4 children probe and attach methods can be called earlier in the boot sequence, so now it is up to the child drivers to wait for a kernel initialization completion if it is required.
This commit is contained in:
parent
41b24e0917
commit
6777ccd98b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=354303
@ -74,7 +74,6 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#define DO_POLL(sc) (cold || kdb_active || SCHEDULER_STOPPED() || sc->poll)
|
||||
|
||||
static void ig4iic_start(void *xdev);
|
||||
static void ig4iic_intr(void *cookie);
|
||||
static void ig4iic_dump(ig4iic_softc_t *sc);
|
||||
|
||||
@ -664,38 +663,14 @@ ig4iic_attach(ig4iic_softc_t *sc)
|
||||
"Unable to setup irq: error %d\n", error);
|
||||
}
|
||||
|
||||
sc->enum_hook.ich_func = ig4iic_start;
|
||||
sc->enum_hook.ich_arg = sc->dev;
|
||||
|
||||
/*
|
||||
* We have to wait until interrupts are enabled. I2C read and write
|
||||
* only works if the interrupts are available.
|
||||
*/
|
||||
if (config_intrhook_establish(&sc->enum_hook) != 0)
|
||||
error = ENOMEM;
|
||||
else
|
||||
error = 0;
|
||||
|
||||
done:
|
||||
return (error);
|
||||
}
|
||||
|
||||
void
|
||||
ig4iic_start(void *xdev)
|
||||
{
|
||||
int error;
|
||||
ig4iic_softc_t *sc;
|
||||
device_t dev = (device_t)xdev;
|
||||
|
||||
sc = device_get_softc(dev);
|
||||
|
||||
config_intrhook_disestablish(&sc->enum_hook);
|
||||
|
||||
error = bus_generic_attach(sc->dev);
|
||||
if (error) {
|
||||
device_printf(sc->dev,
|
||||
"failed to attach child: error %d\n", error);
|
||||
}
|
||||
|
||||
done:
|
||||
return (error);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -48,7 +48,6 @@ enum ig4_vers { IG4_HASWELL, IG4_ATOM, IG4_SKYLAKE, IG4_APL };
|
||||
|
||||
struct ig4iic_softc {
|
||||
device_t dev;
|
||||
struct intr_config_hook enum_hook;
|
||||
device_t iicbus;
|
||||
struct resource *regs_res;
|
||||
int regs_rid;
|
||||
|
Loading…
Reference in New Issue
Block a user