IPC driver for Intel Mobile Internet Device (MID) platforms
Subsystems (4)
PATCH 1/1 IPC driver for Intel Mobile Internet Device (MID) platforms
From: Sreedhara DS <[email protected]>
The IPC is used to bridge the communications between kernel and SCU on some embedded Intel x86 platforms.
(Some reworking and additional functions added by Alan Cox)
Signed-off-by Sreedhara DS <[email protected]>
Signed-off-by Alan Cox <[email protected]>
---
arch/x86/include/asm/intel_scu_ipc.h | 101 ++++ drivers/platform/x86/Kconfig | 8 drivers/platform/x86/Makefile | 1 drivers/platform/x86/intel_scu_ipc.c | 951 ++++++++++++++++++++++++++++++++++ 4 files changed, 1061 insertions(+), 0 deletions(-) create mode 100644 arch/x86/include/asm/intel_scu_ipc.h create mode 100644 drivers/platform/x86/intel_scu_ipc.c
arch/x86/include/asm/intel_scu_ipc.h new file +101 -0
@@ -0,0 +1,101 @@ +#ifndef _ASM_X86_INTEL_SCU_IPC_H_ +#define _ASM_X86_INTEL_SCU_IPC_H_ + +struct scu_fw_version { +u8 rtMinorVer;/* SCU RT Firmware Minor Revision */ +u8 rtMajorVer;/* SCU RT Firmware Major Revision */ +u8 romMinorVer;/* SCU ROM Firmware Minor Revision */ +u8 romMajorVer;/* SCU ROM Firmware Major Revision */ +u8 punitMinorVer;/* P-unit Microcode Minor Revision */ +u8 punitMajorVer;/* P-unit Microcode Major Revision */ +u8 iaMinorVer;/* IA-32 Firmware Minor Revision */ +u8 iaMajorVer;/* IA-32 Firmware Major Revision */ +u8 ftlMinorVer;/* FTL Driver Minor Revision */ +u8 ftlMajorVer;/* FTL Driver Major Revision */ +u8 valMinorVer;/* Validation Hooks Minor Revision */ +u8 valMajorVer;/* Validation Hooks Major Revision */ +u8 ifwiMinorVer;/* IFWI Minor Revision */ +u8 ifwiMajorVer;/* IFWI Major Revision */ +} ; + +struct battery_property { +u32 capacity;/* Charger capacity */ +u8 crnt;/* Quick charge current value*/ +u8 volt;/* Fine adjustment of constant charge voltage */ +u8 prot;/* CHRGPROT register value */ +u8 prot2;/* CHRGPROT1 register value */ +u8 timer;/* Charging timer */ +} __attribute__((packed)); + +/* Read single register */ +int intel_scu_ipc_ioread8 (u16 addr,u8 *data); + +/* Read two registers */ +int intel_scu_ipc_ioread16 (u16 addr,u16 *data); + +/* Read four registers */ +int intel_scu_ipc_ioread32 (u16 addr,u32 *data); + +/* Read a vector */ +int intel_scu_ipc_readv (u16 *addr,u8 *data,int len); + +/* Write single register */ +int intel_scu_ipc_iowrite8 (u16 addr,u8 data); + +/* Write two registers */ +int intel_scu_ipc_iowrite16 (u16 addr,u16 data); + +/* Write four registers */ +int intel_scu_ipc_iowrite32 (u16 addr,u32 data); + +/* Write a vector */ +int intel_scu_ipc_writev (u16 *addr,u8 *data,int len); + +/* +* Update single register based on the mask +* First element of data is register value and second element is mask value +*/ +int intel_scu_ipc_update_register (u16 addr,u8 data[2 ]); + +/* +* Indirect register read +* Can be used when SCCB(System Controller Configuration Block) register +* HRIM(Honor Restricted IPC Messages) is set (bit 23) +*/ +int intel_scu_ipc_register_read (u32 addr,u32 *data); + +/* +* Indirect register write +* Can be used when SCCB(System Controller Configuration Block) register +* HRIM(Honor Restricted IPC Messages) is set (bit 23) +*/ +int intel_scu_ipc_register_write (u32 addr,u32 data); + +int intel_scu_ipc_simple_command (int cmd,int sub); + +/* Read the coulomb counter accumulator to monitor the battery charge level */ +int intel_scu_ipc_battery_cc_read (u32 *value); + +/* Write the coulomb counter accumulator */ +int intel_scu_ipc_battery_cc_write (u32 value); + +/* Read battery properties */ +int intel_scu_ipc_battery_property (struct battery_property *prop); + +/* +* Used to enable Timer Services for Kernel Watchdog Operation permitting +* automatic reset or reboot of the system if tripped. +* Set watchdog timer value, returns 0 on success, 1 on error +*/ +int intel_scu_ipc_set_watchdog (u32 warn_threshold,u32 reset_threshold); + +/* I2C control api */ +int intel_scu_ipc_i2c_cntrl (u32 addr,u32 *data); + +/* Read FW version */ +int intel_scu_ipc_fw_version (struct scu_fw_version *version); + +/* Update FW version */ +int intel_scu_ipc_fw_update (u8 *buffer,u32 length); + +#endif
drivers/platform/x86/Kconfig +8 -0
@@ -526,4 +526,12 @@ config ACPI_CMPC keys as input device, backlight device, tablet and accelerometer devices. +config INTEL_SCU_IPC + bool "Intel SCU IPC Support" + depends on X86_MRST + default y + ---help--- + IPC is used to bridge the communications between kernel and SCU on + some embedded Intel x86 platforms. + endif # X86_PLATFORM_DEVICES
drivers/platform/x86/Makefile +1 -0
@@ -25,3 +25,4 @@ obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o obj-$(CONFIG_TOPSTAR_LAPTOP) += topstar-laptop.o obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o obj-$(CONFIG_TOSHIBA_BT_RFKILL) += toshiba_bluetooth.o +obj-$(CONFIG_INTEL_SCU_IPC) += intel_scu_ipc.o
drivers/platform/x86/intel_scu_ipc.c new file +951 -0
951 lines not on this page · raw message