| /* |
| * Copyright (C) 2010 Samsung Electronics |
| * Thomas Ryu <smilesr.ryu@samsung.com> |
| * |
| * 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 2 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, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| */ |
| |
| #ifndef __MUIC_INTERNAL_H__ |
| #define __MUIC_INTERNAL_H__ |
| |
| #include <linux/muic/muic.h> |
| |
| #define MUIC_DEV_NAME "muic-universal" |
| |
| #define muic_err(fmt, ...) \ |
| do { \ |
| pr_err(pr_fmt(fmt), ##__VA_ARGS__); \ |
| } while (0) |
| |
| #define muic_info(fmt, ...) \ |
| do { \ |
| pr_info(pr_fmt(fmt), ##__VA_ARGS__); \ |
| } while (0) |
| |
| #define muic_dbg(fmt, ...) \ |
| do { \ |
| pr_debug(pr_fmt(fmt), ##__VA_ARGS__); \ |
| } while (0) |
| |
| enum muic_op_mode { |
| OPMODE_MUIC = 0<<0, |
| OPMODE_CCIC = 1<<0, |
| }; |
| |
| /* Interrupt type */ |
| enum { |
| INT_REQ_NONE = 0, |
| INT_REQ_ATTACH = 1, |
| INT_REQ_DETACH = 2, |
| INT_REQ_OVP = 3, |
| INT_REQ_RESET = 4, |
| INT_REQ_DONE = 5, |
| INT_REQ_DISCARD = 6, |
| INT_REQ_DONE_HV = 7, |
| INT_REQ_DONE_VB = 8, |
| }; |
| |
| /* Slave addr = 0x4A: MUIC */ |
| enum ioctl_cmd { |
| GET_COM_VAL = 0x01, |
| GET_CTLREG = 0x02, |
| GET_ADC = 0x03, |
| GET_SWITCHING_MODE = 0x04, |
| GET_INT_MASK = 0x05, |
| GET_REVISION = 0x06, |
| GET_OTG_STATUS = 0x7, |
| GET_CHGTYPE = 0x08, |
| GET_RESID3 = 0x09, |
| GET_PRCHGTYPE = 0x0A, |
| }; |
| |
| enum switching_mode{ |
| SWMODE_MANUAL =0, |
| SWMODE_AUTO = 1, |
| }; |
| |
| /* |
| * Manual Switch |
| * D- [7:5] / D+ [4:2] / Vbus [1:0] |
| * 000: Open all / 001: USB / 010: AUDIO / 011: UART / 100: V_AUDIO |
| * 00: Vbus to Open / 01: Vbus to Charger / 10: Vbus to MIC / 11: Vbus to VBout |
| */ |
| |
| /* COM port index */ |
| enum com_index { |
| COM_OPEN = 1, |
| COM_OPEN_WITH_V_BUS = 2, |
| COM_UART_AP = 3, |
| COM_UART_CP = 4, |
| COM_USB_AP = 5, |
| COM_USB_CP = 6, |
| COM_AUDIO = 7, |
| }; |
| |
| #if IS_ENABLED(CONFIG_HICCUP_CHARGER) |
| #define GND_PATH COM_USB_CP |
| #endif |
| |
| enum{ |
| ADC_SCANMODE_CONTINUOUS = 0x0, |
| ADC_SCANMODE_ONESHOT = 0x1, |
| ADC_SCANMODE_PULSE = 0x2, |
| }; |
| |
| enum vps_type{ |
| VPS_TYPE_SCATTERED =0, |
| VPS_TYPE_TABLE =1, |
| }; |
| |
| /* VPS data from a chip. */ |
| typedef struct _muic_vps_scatterred_type { |
| u8 val1; |
| u8 val2; |
| u8 val3; |
| u8 adc; |
| u8 vbvolt; |
| }vps_scatterred_type; |
| |
| typedef struct _muic_vps_table_t { |
| u8 uid; |
| u8 uidgnd; |
| u8 prchgtyp; |
| u8 adc; |
| u8 vbvolt; |
| u8 adc1k; |
| u8 adcerr; |
| u8 adclow; |
| u8 chgdetrun; |
| u8 chgtyp; |
| u8 DCDTimedout; |
| const char *vps_name; |
| const muic_attached_dev_t attached_dev; |
| u8 status[3]; |
| u8 bccontrol[2]; |
| u8 control[4]; |
| u8 hvcontrol[2]; |
| }vps_table_type; |
| |
| struct muic_intr_data { |
| u8 intr1; |
| u8 intr2; |
| }; |
| |
| struct muic_irq_t { |
| int irq_val; |
| int irq_uid; |
| int irq_uidgnd; |
| int irq_prchgtyp; |
| int irq_adc1k; |
| int irq_adcerr; |
| int irq_adc; |
| int irq_chgtyp; |
| int irq_vbvolt; |
| int irq_dcdtmr; |
| }; |
| |
| typedef union _muic_vps_t { |
| vps_scatterred_type s; |
| vps_table_type t; |
| char vps_data[120]; |
| }vps_data_t; |
| |
| /* muic chip specific internal data structure |
| * that setted at muic-xxxx.c file |
| */ |
| struct regmap_desc; |
| |
| typedef struct _muic_data_t { |
| |
| struct device *dev; |
| struct i2c_client *i2c; /* i2c addr: 0x4A; MUIC */ |
| struct mutex muic_mutex; |
| |
| /* model dependant muic platform data */ |
| struct muic_platform_data *pdata; |
| |
| /* muic current attached device */ |
| muic_attached_dev_t attached_dev; |
| |
| vps_data_t vps; |
| int vps_table; |
| |
| struct muic_intr_data intr; |
| struct muic_irq_t irqs; |
| |
| /* regmap_desc_t */ |
| struct regmap_desc *regmapdesc; |
| |
| char *chip_name; |
| |
| int gpio_uart_sel; |
| |
| /* muic Device ID */ |
| u8 muic_vendor; /* Vendor ID */ |
| u8 muic_version; /* Version ID */ |
| |
| bool is_gamepad; |
| bool is_factory_start; |
| bool is_rustproof; |
| bool is_otg_test; |
| bool is_hiccup_mode; |
| |
| struct delayed_work init_work; |
| struct delayed_work usb_work; |
| |
| bool is_muic_ready; |
| bool undefined_range; |
| bool discard_interrupt; |
| bool is_dcdtmr_intr; |
| |
| struct hv_data *phv; |
| |
| #if defined(CONFIG_USB_EXTERNAL_NOTIFY) |
| /* USB Notifier */ |
| struct notifier_block usb_nb; |
| #endif |
| |
| #if defined(CONFIG_MUIC_TEST_FUNC) |
| bool usb_to_ta_state; |
| #endif |
| |
| #if defined(CONFIG_MUIC_SUPPORT_CCIC) |
| /* legacy TA or USB for CCIC */ |
| muic_attached_dev_t legacy_dev; |
| |
| /* CCIC Notifier */ |
| #ifdef CONFIG_USB_TYPEC_MANAGER_NOTIFIER |
| struct notifier_block manager_nb; |
| #else |
| struct notifier_block ccic_nb; |
| #endif |
| |
| struct delayed_work ccic_work; |
| |
| /* Operation Mode */ |
| enum muic_op_mode opmode; |
| bool afc_water_disable; |
| bool afc_tsub_disable; |
| |
| int rid; |
| bool is_ccic_attach; |
| int is_ccic_afc_enable; |
| bool is_ccic_rp56_enable; |
| #endif |
| }muic_data_t; |
| |
| extern struct device *switch_device; |
| |
| #endif /* __MUIC_INTERNAL_H__ */ |