Signed-off-by: Wei-Chun Pan <[email protected]>
---
 include/linux/mfd/imanager2_ec.h | 358 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 358 insertions(+)
 create mode 100644 include/linux/mfd/imanager2_ec.h

diff --git a/include/linux/mfd/imanager2_ec.h b/include/linux/mfd/imanager2_ec.h
new file mode 100644
index 0000000..bf7d70e
--- /dev/null
+++ b/include/linux/mfd/imanager2_ec.h
@@ -0,0 +1,358 @@
+/*
+ * imanager2_ec.h - MFD driver defines of Advantech EC IT8516/18/28
+ * Copyright (C) 2014  Richard Vidal-Dorsch <[email protected]>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __IMANAGER2_EC_H__
+#define __IMANAGER2_EC_H__
+
+#include <linux/mutex.h>
+
+#define EC_FLAG_IO             0
+#define EC_FLAG_IO_MAILBOX     (1 << 0)
+#define EC_FLAG_MAILBOX                (1 << 1)
+
+#define EC_MAX_DEVICE_ID_NUM   0xFF
+#define EC_MAX_ITEM_NUM                32
+
+struct ec_table {
+       u8 devid2itemnum[EC_MAX_DEVICE_ID_NUM];
+       u8 pinnum[EC_MAX_ITEM_NUM];
+       u8 devid[EC_MAX_ITEM_NUM];
+};
+
+struct ec_version {
+       u16 kernel_ver,
+           chip_code,
+           prj_id,
+           prj_ver;
+};
+
+#define EC_MAX_LEN_PROJECT_NAME        8
+
+struct imanager2 {
+       u16 id;
+       u32 flag;
+       struct mutex lock;                              /* protects io */
+       char prj_name[EC_MAX_LEN_PROJECT_NAME + 1];     /* strlen + '\0' */
+       struct ec_version version;
+       struct ec_table table;
+};
+
+/*
+ * Definition
+ */
+#define EC_TABLE_ITEM_UNUSED   0xFF
+#define EC_TABLE_DID_NODEV     0x00
+#define EC_TABLE_HWP_NODEV     0xFF
+#define EC_TABLE_NOITEM                0xFF
+
+#define EC_ERROR               0xFF
+
+#define EC_RAM_BANK_SIZE       32      /* 32 bytes size for each bank. */
+#define EC_RAM_BUFFER_SIZE     256     /* 32 bytes * 8 banks = 256 bytes */
+
+#define EC_SIO_CMD             0x29C
+#define EC_SIO_DATA            0x29D
+
+/* Access Mailbox */
+#define EC_IO_PORT_CMD         0x29A
+#define EC_IO_PORT_DATA                0x299
+
+#define EC_IO_CMD_READ_OFFSET  0xA0
+#define EC_IO_CMD_WRITE_OFFSET 0x50
+
+#define EC_ITE_PORT_OFS                0x29E
+#define EC_ITE_PORT_DATA       0x29F
+
+/*
+ * CMD - IO
+ */
+/* ADC */
+#define EC_CMD_ADC_INDEX                               0x15
+#define EC_CMD_ADC_READ_LSB                            0x16
+#define EC_CMD_ADC_READ_MSB                            0x1F
+/* HW Control Table */
+#define EC_CMD_HWCTRLTABLE_INDEX                       0x20
+#define EC_CMD_HWCTRLTABLE_GET_PIN_NUM                 0x21
+#define EC_CMD_HWCTRLTABLE_GET_DEVICE_ID               0x22
+#define EC_CMD_HWCTRLTABLE_GET_PIN_ACTIVE_POLARITY     0x23
+/* ACPI RAM */
+#define EC_CMD_ACPIRAM_READ                            0x80
+#define EC_CMD_ACPIRAM_WRITE                           0x81
+/* Extend RAM */
+#define EC_CMD_EXTRAM_READ                             0x86
+#define EC_CMD_EXTRAM_WRITE                            0x87
+/* HW RAM */
+#define EC_CMD_HWRAM_READ                              0x88
+#define EC_CMD_HWRAM_WRITE                             0x89
+
+/*
+ * ACPI RAM Address Table
+ */
+/* n = 1 ~ 2 */
+#define EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n)    (0x60 + 3 * ((n) - 1))
+#define        EC_ACPIRAM_ADDR_LOCAL_TEMPERATURE(n) \
+       EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n)
+#define        EC_ACPIRAM_ADDR_REMOTE_TEMPERATURE(n) \
+       (EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n) + 1)
+#define        EC_ACPIRAM_ADDR_WARNING_TEMPERATURE(n)\
+       (EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n) + 2)
+
+/* N = 0 ~ 2 */
+#define EC_ACPIRAM_ADDR_FAN_SPEED_BASE(N)      (0x70 + 2 * (N))
+
+#define EC_ACPIRAM_ADDR_KERNEL_MAJOR_VERSION   0xF8
+#define EC_ACPIRAM_ADDR_CHIP_VENDOR_CODE       0xFA
+#define EC_ACPIRAM_ADDR_PROJECT_NAME_CODE      0xFC
+#define EC_ACPIRAM_ADDR_FIRMWARE_MAJOR_VERSION 0xFE
+
+/*
+ * HW RAM Address Table
+ */
+/* Thermal Source Control RAM 0xB0-0xC7 (N: 0 ~ 3) */
+#define EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N)      (0xB0 + 6 * (N))
+#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_CHANNEL(N) \
+       EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N)
+#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_ADDR(N) \
+       (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 1)
+#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_CMD(N)         \
+       (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 2)
+#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_STATUS(N) \
+       (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 3)
+#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_FAN_CODE(N) \
+       (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 4)
+#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_TEMPERATURE(N) \
+       (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 5)
+/* Fan Control 0xD0-0xEF (N: 0 ~ 3) */
+#define EC_HWRAM_ADDR_FAN_BASE_ADDR(N) (0xD0 + 0x10 * (N))
+#define EC_HWRAM_ADDR_FAN_CODE(N)      EC_HWRAM_ADDR_FAN_BASE_ADDR(N)
+#define EC_HWRAM_ADDR_FAN_STATUS(N)    (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 1)
+#define EC_HWRAM_ADDR_FAN_CONTROL(N)   (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 2)
+#define EC_HWRAM_ADDR_FAN_TEMP_HI(N)   (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 3)
+#define EC_HWRAM_ADDR_FAN_TEMP_LO(N)   (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 4)
+#define EC_HWRAM_ADDR_FAN_TEMP_LOSTOP(N) \
+                                       (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 5)
+#define EC_HWRAM_ADDR_FAN_PWM_HI(N)    (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 6)
+#define EC_HWRAM_ADDR_FAN_PWM_LO(N)    (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 7)
+
+/*
+ * OFS - Mailbox
+ */
+/* Mailbox Structure */
+#define EC_MAILBOX_OFFSET_CMD          0x00
+#define EC_MAILBOX_OFFSET_STATUS       0x01
+#define EC_MAILBOX_OFFSET_PARA         0x02
+#define EC_MAILBOX_OFFSET_DAT(N)       (0x03 + (N))    /* N = 0x00 ~ 0x2C */
+
+/*
+ * CMD - Mailbox
+ */
+/* GPIO */
+#define EC_CMD_MAILBOX_READ_HW_PIN                             0x11
+#define EC_CMD_MAILBOX_WRITE_HW_PIN                            0x12
+/* Storage */
+#define EC_CMD_MAILBOX_READ_EC_RAM                             0x1E
+#define EC_CMD_MAILBOX_WRITE_EC_RAM                            0x1F
+/* OTHERS */
+#define EC_CMD_MAILBOX_READ_DYNAMIC_TABLE                      0x20
+/* Thermal Protect */
+#define EC_CMD_MAILBOX_READ_THERMAL_SOURCE                     0x42
+#define EC_CMD_MAILBOX_WRITE_THERMAL_SOURCE                    0x43
+/* Storage */
+#define EC_CMD_MALLBOX_CLEAR_256_BYTES_BUFFER                  0xC0
+#define EC_CMD_MALLBOX_READ_256_BYTES_BUFFER                   0xC1
+#define EC_CMD_MALLBOX_WRITE_256_BYTES_BUFFER                  0xC2
+#define EC_CMD_MALLBOX_READ_EEPROM_DATA_FROM_256_BYTES_BUFFER  0xC3
+#define EC_CMD_MALLBOX_WRITE_256_BYTES_BUFFER_INTO_EEPROM_DATA 0xC4
+/* General Mailbox Command */
+#define EC_CMD_MAILBOX_GET_FIRMWARE_VERSION_AND_PROJECT_NAME   0xF0
+#define EC_CMD_MAILBOX_CLEAR_ALL                               0xFF
+
+/*
+ * Status - Mailbox
+ */
+#define EC_MAILBOX_STATUS_FAIL         0x00
+#define EC_MAILBOX_STATUS_SUCCESS      0x01
+
+/*
+ * PARA - Mailbox
+ */
+/* RAM Type */
+#define EC_RAM_BANK_ACPI       0x01
+#define EC_RAM_BANK_HW         0x02
+#define EC_RAM_BANK_EXT                0x03
+#define EC_RAM_BANK_BUFFER     0x06
+/* Dynamic Type */
+#define EC_DYNAMIC_DEVICE_ID   0x00
+#define EC_DYNAMIC_HW_PIN      0x01
+#define EC_DYNAMIC_POLARITY    0x02
+
+/*
+ * Functions - Mailbox
+ */
+/* command = 0x20 */
+int imanager2_mbox_get_dynamic_table(u32 ecflag, u8 type, u8 *table);
+/* command = 0x42 */
+int imanager2_mbox_read_thermalzone(u32 ecflag, u8 zone, u8 *smbid, u8 *fanid,
+                                   u8 *buf, int *len);
+/* command = 0xC0 */
+int imanager2_mbox_clear_ram(u32 ecflag);
+/* command = 0xC1 */
+int imanager2_mbox_read_ram_across_banks(u32 ecflag, u8 *data, int len);
+/* command = 0x1E */
+int imanager2_mbox_read_ram(u32 ecflag, u8 bank, u8 offset, u8 *buf, u8 len);
+/* command = 0x1F */
+int imanager2_mbox_write_ram(u32 ecflag, u8 bank, u8 offset, u8 *buf, u8 len);
+/* command = 0xF0 */
+int imanager2_mbox_get_project_information(u32 ecflag, u8 *prj_name,
+                                          u16 *kernel_ver, u16 *chip_code,
+                                          u16 *prj_id, u16 *prj_ver);
+
+/*
+ * Functions - basic
+ */
+#define IO_FLAG_OBF    (1 << 0)        /* output buffer full */
+#define IO_FLAG_IBF    (1 << 1)        /* input buffer full  */
+int ec_inb_after_obf1(u8 *data);
+int ec_outb_after_ibc0(u16 port, u8 data);
+/* ITE mailbox access */
+int imanager2_mbox_read_data(u32 ecflag, u8 cmd, u8 para, u8 *data, int len);
+int imanager2_mbox_write_data(u32 ecflag, u8 cmd, u8 para, u8 *data, int len);
+/* only IO access */
+int imanager2_mbox_io_read(u8 command, u8 offset, u8 *buf, u8 len);
+int imanager2_mbox_io_write(u8 command, u8 offset, u8 *buf, u8 len);
+int imanager2_mbox_io_simple_read(u8 command, u8 *value);
+/* ITE Mailbox & IO access */
+int imanager2_mbox_read_ram_support_io(u32 ecflag, u8 bank, u8 addr, u8 *buf,
+                                      u8 len);
+
+/*
+ * Device ID
+ */
+enum ec_device_id {
+       /* GPIO */
+       altgpio0 = 0x10,        /* 0x10 */
+       altgpio1,
+       altgpio2,
+       altgpio3,
+       altgpio4,
+       altgpio5,
+       altgpio6,
+       altgpio7,
+       /* GPIO - Button */
+       btn0,
+       btn1,
+       btn2,
+       btn3,
+       btn4,
+       btn5,
+       btn6,
+       btn7,
+       /* PWM - Fan */
+       cpufan_2p,              /* 0x20 */
+       cpufan_4p,
+       sysfan1_2p,
+       sysfan1_4p,
+       sysfan2_2p,
+       sysfan2_4p,
+       /* PWM - Brightness Control */
+       pwmbrightness,
+       /* PWM - System Speaker */
+       pwmbeep,
+       /* SMBus */
+       smboem0,
+       smboem1,
+       smboem2,
+       smbeeprom,
+       smbthermal0,
+       smbthermal1,
+       smbsecurityeep,
+       i2coem,
+       /* DAC - Speaker */
+       dacspeaker,             /* 0x30 */
+       /* SMBus */
+       smbeep2k = 0x38,
+       oemeep,
+       oemeep2k,
+       peci,
+       smboem3,
+       smblink,
+       smbslv,
+       /* GPIO - LED */
+       powerled = 0x40,        /* 0x40 */
+       batledg,
+       oemled0,
+       oemled1,
+       oemled2,
+       batledr,
+       /* SMBus - Smart Battery */
+       smartbat1 = 0x48,
+       smartbat2,
+       /* ADC */
+       adcmosbat = 0x50,       /* 0x50 */
+       adcmosbatx2,
+       adcmosbatx10,
+       adcbat,
+       adcbatx2,
+       adcbatx10,
+       adc5vs0,
+       adc5vs0x2,
+       adc5vs0x10,
+       adv5vs5,
+       adv5vs5x2,
+       adv5vs5x10,
+       adc33vs0,
+       adc33vs0x2,
+       adc33vs0x10,
+       adc33vs5,
+       adc33vs5x2,             /* 0x60 */
+       adc33vs5x10,
+       adv12vs0,
+       adv12vs0x2,
+       adv12vs0x10,
+       adcvcorea,
+       adcvcoreax2,
+       adcvcoreax10,
+       adcvcoreb,
+       adcvcorebx2,
+       adcvcorebx10,
+       adcdc,
+       adcdcx2,
+       adcdcx10,
+       adcdcstby,
+       adcdcstbyx2,
+       adcdcstbyx10,           /* 0x70 */
+       adcdcother,
+       adcdcotherx2,
+       adcdcotherx10,
+       adccurrent,
+       /* IRQ - Watchdog */
+       wdirq = 0x78,
+       /* GPIO - Watchdog */
+       wdnmi,
+       /* Tacho - Fan */
+       tacho0 = 0x80,          /* 0x80 */
+       tacho1,
+       tacho2,
+       /* PWM - Brightness Control */
+       pwmbrightness2 = 0x88,
+       /* GPIO - Backlight Control */
+       brionoff1,
+       brionoff2,
+};
+
+#endif /* __IMANAGER2_EC_H__ */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to