drivers/input/serio/i8042-acpipnpio.h
Source file repositories/reference/linux-study-clean/drivers/input/serio/i8042-acpipnpio.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/input/serio/i8042-acpipnpio.h- Extension
.h- Size
- 47949 bytes
- Lines
- 1856
- Domain
- Driver Families
- Bucket
- drivers/input
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/acpi.hasm/x86_init.hlinux/dmi.hlinux/pnp.h
Detected Declarations
function i8042_read_datafunction i8042_read_statusfunction i8042_write_datafunction i8042_write_commandfunction i8042_pnp_id_to_stringfunction i8042_pnp_kbd_probefunction i8042_pnp_aux_probefunction i8042_pnp_exitfunction i8042_pnp_initfunction i8042_pnp_initfunction i8042_pnp_exitfunction i8042_check_quirksfunction i8042_platform_exit
Annotated Snippet
if (!pnp_data_busted && i8042_pnp_kbd_irq) {
pr_warn("PNP: PS/2 appears to have AUX port disabled, "
"if this is incorrect please boot with i8042.nopnp\n");
i8042_noaux = true;
} else {
pr_warn("PNP: PS/2 controller doesn't have AUX irq; using default %d\n",
i8042_aux_irq);
i8042_pnp_aux_irq = i8042_aux_irq;
}
}
i8042_data_reg = i8042_pnp_data_reg;
i8042_command_reg = i8042_pnp_command_reg;
i8042_kbd_irq = i8042_pnp_kbd_irq;
i8042_aux_irq = i8042_pnp_aux_irq;
#ifdef CONFIG_X86
i8042_bypass_aux_irq_test = !pnp_data_busted &&
dmi_check_system(i8042_dmi_laptop_table);
#endif
return 0;
}
#else /* !CONFIG_PNP */
static inline int i8042_pnp_init(void) { return 0; }
static inline void i8042_pnp_exit(void) { }
#endif /* CONFIG_PNP */
#ifdef CONFIG_X86
static void __init i8042_check_quirks(void)
{
const struct dmi_system_id *device_quirk_info;
uintptr_t quirks;
device_quirk_info = dmi_first_match(i8042_dmi_quirk_table);
if (!device_quirk_info)
return;
quirks = (uintptr_t)device_quirk_info->driver_data;
if (quirks & SERIO_QUIRK_NOKBD)
i8042_nokbd = true;
if (quirks & SERIO_QUIRK_NOAUX)
i8042_noaux = true;
if (quirks & SERIO_QUIRK_NOMUX)
i8042_nomux = true;
if (quirks & SERIO_QUIRK_FORCEMUX)
i8042_nomux = false;
if (quirks & SERIO_QUIRK_UNLOCK)
i8042_unlock = true;
if (quirks & SERIO_QUIRK_PROBE_DEFER)
i8042_probe_defer = true;
/* Honor module parameter when value is not default */
if (i8042_reset == I8042_RESET_DEFAULT) {
if (quirks & SERIO_QUIRK_RESET_ALWAYS)
i8042_reset = I8042_RESET_ALWAYS;
if (quirks & SERIO_QUIRK_RESET_NEVER)
i8042_reset = I8042_RESET_NEVER;
}
if (quirks & SERIO_QUIRK_DIRECT)
i8042_direct = true;
if (quirks & SERIO_QUIRK_DUMBKBD)
i8042_dumbkbd = true;
if (quirks & SERIO_QUIRK_NOLOOP)
i8042_noloop = true;
if (quirks & SERIO_QUIRK_NOTIMEOUT)
i8042_notimeout = true;
if (quirks & SERIO_QUIRK_KBDRESET)
i8042_kbdreset = true;
if (quirks & SERIO_QUIRK_DRITEK)
i8042_dritek = true;
#ifdef CONFIG_PNP
if (quirks & SERIO_QUIRK_NOPNP)
i8042_nopnp = true;
#endif
if (quirks & SERIO_QUIRK_FORCENORESTORE)
i8042_forcenorestore = true;
}
#else
static inline void i8042_check_quirks(void) {}
#endif
static int __init i8042_platform_init(void)
{
int retval;
#ifdef CONFIG_X86
u8 a20_on = 0xdf;
Annotation
- Immediate include surface: `linux/acpi.h`, `asm/x86_init.h`, `linux/dmi.h`, `linux/pnp.h`.
- Detected declarations: `function i8042_read_data`, `function i8042_read_status`, `function i8042_write_data`, `function i8042_write_command`, `function i8042_pnp_id_to_string`, `function i8042_pnp_kbd_probe`, `function i8042_pnp_aux_probe`, `function i8042_pnp_exit`, `function i8042_pnp_init`, `function i8042_pnp_init`.
- Atlas domain: Driver Families / drivers/input.
- Implementation status: source implementation candidate.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.