diff options
| author | Davide Garberi <dade.garberi@gmail.com> | 2018-09-22 14:21:47 +0200 |
|---|---|---|
| committer | Davide Garberi <dade.garberi@gmail.com> | 2022-07-27 18:59:05 +0200 |
| commit | 0c189352071aa8314bee354d9d962212ebf8e705 (patch) | |
| tree | f6949b1a5f35f66dd86a35924d3f1d3102ea6877 /drivers/misc | |
| parent | 297ade96c39b112ce592d548530d9422cb4cc8eb (diff) | |
cclogic: Remove unused files
* These files are completely unused and not build by any device
* Probably not even ZUK knows why these files were here
Signed-off-by: Davide Garberi <dade.garberi@gmail.com>
Diffstat (limited to 'drivers/misc')
| -rw-r--r-- | drivers/misc/cclogic/Kconfig | 21 | ||||
| -rw-r--r-- | drivers/misc/cclogic/Makefile | 3 | ||||
| -rw-r--r-- | drivers/misc/cclogic/pi5usb30216.c | 543 | ||||
| -rw-r--r-- | drivers/misc/cclogic/ptn5150h.c | 398 | ||||
| -rw-r--r-- | drivers/misc/cclogic/tusb320.c | 423 |
5 files changed, 0 insertions, 1388 deletions
diff --git a/drivers/misc/cclogic/Kconfig b/drivers/misc/cclogic/Kconfig index 445243f08079..dfe6b585a41c 100644 --- a/drivers/misc/cclogic/Kconfig +++ b/drivers/misc/cclogic/Kconfig @@ -9,14 +9,6 @@ menuconfig CCLOGIC if CCLOGIC - -config TYPEC_CCLOGIC_PI5USB - depends on I2C - tristate "Pericom Pi5usb30216 Support" - ---help--- - The Pericom pi5usb30216 chip is used as cc-logic of TYPEC - interface. - config TYPEC_CCLOGIC_PI5USBD depends on I2C tristate "Pericom Pi5usb30216d Support" @@ -24,23 +16,10 @@ config TYPEC_CCLOGIC_PI5USBD The Pericom pi5usb30216d chip is used as cc-logic of TYPEC interface. -config TYPEC_CCLOGIC_TUSB320 - depends on I2C - tristate "TI TUSB320 Support" - ---help--- - The TI tusb320 chip is used as cc-logic of TYPEC - interface. - config TYPEC_CCLOGIC_TUSB320HAI depends on I2C tristate "TI TUSB320Hai Support" ---help--- The TI tusb320hai chip is used as cc-logic of TYPEC -config TYPEC_CCLOGIC_PTN5150H - depends on I2C - tristate "NXP ptn5150h Support" - ---help--- - The NXP ptn5150h chip is used as cc-logic of TYPEC - endif # CCLOGIC diff --git a/drivers/misc/cclogic/Makefile b/drivers/misc/cclogic/Makefile index 5a15aeb0d038..b0256a428144 100644 --- a/drivers/misc/cclogic/Makefile +++ b/drivers/misc/cclogic/Makefile @@ -4,9 +4,6 @@ obj-$(CONFIG_CCLOGIC) += cclogic-core.o obj-$(CONFIG_CCLOGIC) += cclogic-class.o -obj-$(CONFIG_TYPEC_CCLOGIC_PI5USB) += pi5usb30216.o -obj-$(CONFIG_TYPEC_CCLOGIC_TUSB320) += tusb320.o obj-$(CONFIG_TYPEC_CCLOGIC_TUSB320HAI) += tusb320hai.o -obj-$(CONFIG_TYPEC_CCLOGIC_PTN5150H) += ptn5150h.o obj-$(CONFIG_TYPEC_CCLOGIC_PI5USBD) += pi5usb30216d.o diff --git a/drivers/misc/cclogic/pi5usb30216.c b/drivers/misc/cclogic/pi5usb30216.c deleted file mode 100644 index d4f6ecf63258..000000000000 --- a/drivers/misc/cclogic/pi5usb30216.c +++ /dev/null @@ -1,543 +0,0 @@ -// -// pi5usb30216.c -// -// Drivers for usb type-C interface's CC-Logic chip of Pericom -// -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/io.h> -#include <asm/uaccess.h> -#include <linux/fs.h> -#include <linux/slab.h> -#include <linux/init.h> -#include <linux/i2c.h> -#include <linux/i2c-dev.h> -#include <linux/interrupt.h> -#include <linux/delay.h> -#include <linux/input.h> -#include <linux/gpio.h> -#include <linux/miscdevice.h> -#include <linux/regulator/consumer.h> -#include <linux/of_gpio.h> -#include <linux/wakelock.h> -#include "cclogic-core.h" - - -#define DRIVER_NAME "pericom,pi5usb30216" - - -#define MAX_RETRIES_FOR_PLUGIN_SLOW 4 //about 2 seconds - -#define REG_BASE 1 -#define MAX_REG_NUM 4 - -#define REG_ID (0x01-REG_BASE) -#define VERSION_ID (0x00<<3) -#define VENDOR_ID (0x00<<0) -#define PIUSB30216_DEVID (VERSION_ID|VENDOR_ID) - -#define REG_CONTROL (0x02-REG_BASE) -#define POWERSAVING_MODE (0x01<<7) -#define PORT_SETTING_INTERRUPT_NOMASK (0x00) -#define CHARGING_CURRENT_MODE_DEFAULT (0x00<<3) -#define CHARGING_CURRENT_MODE_MEDIUM (0x01<<3) -#define CHARGING_CURRENT_MODE_HIGH (0x02<<3) -#define PORT_SETTING_DEVICE (0x00<<1) -#define PORT_SETTING_HOST (0x01<<1) -#define PORT_SETTING_DUALROLE (0x02<<1) -#define PORT_SETTING_INTERRUPT_MASK (0x01) -#define PORT_SETTING_INTERRUPT_NOMASK (0x00) - -#define REG_INTERRUPT (0x03-REG_BASE) -#define INTERRUPT_STATE_ATTACHED_BIT (0x01) -#define INTERRUPT_STATE_DETACHED_BIT (0x02) - -#define REG_CC_STATE (0x04-REG_BASE) -#define CCSTATUS_VBUS_BIT (0x01<<7) -#define CCSTATUS_CHARGING_CURRENT_BIT (0x03<<5) -#define CCSTATUS_CHARGING_CURRENT_STANDBY (0x00<<5) -#define CCSTATUS_CHARGING_CURRENT_DEFAULT (0x01<<5) -#define CCSTATUS_CHARGING_CURRENT_MEDIUM (0x02<<5) -#define CCSTATUS_CHARGING_CURRENT_HIGH (0x03<<5) - -#define CCSTATUS_ATTACHED_PORT_STATUS_BIT (0x07<<2) -#define CCSTATUS_ATTACHED_PORT_STATUS_STANDBY (0x00<<2) -#define CCSTATUS_ATTACHED_PORT_STATUS_DEVICE (0x01<<2) -#define CCSTATUS_ATTACHED_PORT_STATUS_HOST (0x02<<2) -#define CCSTATUS_ATTACHED_PORT_STATUS_AUDIO (0x03<<2) -#define CCSTATUS_ATTACHED_PORT_STATUS_DEBUG (0x04<<2) -#define CCSTATUS_ATTACHED_PORT_STATUS_VBUS_CC1_CC2 (0x05<<2) - -#define CCSTATUS_PLUG_POLARITY_BIT (0x03) -#define CCSTATUS_PLUG_POLARITY_STANDBY (0x00) -#define CCSTATUS_PLUG_POLARITY_CC1 (0x01) -#define CCSTATUS_PLUG_POLARITY_CC2 (0x02) -#define CCSTATUS_PLUG_POLARITY_CC1_CC2 (0x03) - - - -/** - * pi5usb30216_write_i2c() - */ -static int pi5usb30216_write_i2c(struct i2c_client *client, u8 reg, u8 data) -{ - int ret = 0; - char val[MAX_REG_NUM] = {0}; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - val[reg] = data; - - ret = i2c_master_send(client, val, 2); - if (ret < 0) { - dev_err(&client->dev,"cclogic:%s-->i2c send error\n",__func__); - return ret; - } - - return 0; - -} -/** - * pi5usb30216_parse_cclogic_state() - */ -static void pi5usb30216_parse_cclogic_state(int reg3, int reg4, - struct cclogic_state *result) -{ - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - result->vbus = false; - result->cc = CCLOGIC_CC_UNKNOWN; - result->evt = CCLOGIC_EVENT_NONE; - result->device = CCLOGIC_DEVICE_UNKNOWN; - result->charger = CCLOGIC_CURRENT_NONE; - - if((reg3&INTERRUPT_STATE_DETACHED_BIT) && - (reg3&INTERRUPT_STATE_ATTACHED_BIT)){ - pr_err("cclogic:%s-->detach and attach in the same time\n", - __func__); - }else{ - if(reg3&INTERRUPT_STATE_DETACHED_BIT){ - result->evt = CCLOGIC_EVENT_DETACHED; - } - if(reg3&INTERRUPT_STATE_ATTACHED_BIT){ - result->evt = CCLOGIC_EVENT_ATTACHED; - } - } - - if(reg4&CCSTATUS_VBUS_BIT){ - result->vbus = true; - } - - switch(reg4&CCSTATUS_CHARGING_CURRENT_BIT){ - case CCSTATUS_CHARGING_CURRENT_STANDBY: - result->charger = CCLOGIC_CURRENT_NONE; - break; - case CCSTATUS_CHARGING_CURRENT_DEFAULT: - result->charger = CCLOGIC_CURRENT_DEFAULT; - break; - case CCSTATUS_CHARGING_CURRENT_MEDIUM: - result->charger = CCLOGIC_CURRENT_MEDIUM; - break; - case CCSTATUS_CHARGING_CURRENT_HIGH: - result->charger = CCLOGIC_CURRENT_HIGH; - break; - } - - switch(reg4&CCSTATUS_PLUG_POLARITY_BIT){ - case CCSTATUS_PLUG_POLARITY_CC1: - result->cc = CCLOGIC_CC1; - break; - case CCSTATUS_PLUG_POLARITY_CC2: - result->cc = CCLOGIC_CC2; - break; - case CCSTATUS_PLUG_POLARITY_STANDBY: - case CCSTATUS_PLUG_POLARITY_CC1_CC2: - default: - break; - } - - switch(reg4&CCSTATUS_ATTACHED_PORT_STATUS_BIT){ - case CCSTATUS_ATTACHED_PORT_STATUS_STANDBY: - result->device = CCLOGIC_NO_DEVICE; - break; - case CCSTATUS_ATTACHED_PORT_STATUS_DEVICE: - result->device = CCLOGIC_USB_DEVICE; - break; - case CCSTATUS_ATTACHED_PORT_STATUS_HOST: - result->device = CCLOGIC_USB_HOST; - break; - case CCSTATUS_ATTACHED_PORT_STATUS_DEBUG: - result->device = CCLOGIC_DEBUG_DEVICE; - break; - case CCSTATUS_ATTACHED_PORT_STATUS_AUDIO://mode audio - result->device = CCLOGIC_AUDIO_DEVICE; - break; - default: - result->device = CCLOGIC_DEVICE_UNKNOWN; - break; - } - -} - -/** - * pi5usb30216_get_state() - */ -static int pi5usb30216_get_state(struct i2c_client *client, - struct cclogic_state *state) -{ - char reg[MAX_REG_NUM] = {0}; - static int reg3,reg4; - static int repeat_times = 0; - static int audio_accessory_flag = 0; - static int debug_accessory_flag = 0; - int ret = 0; - - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - state->vbus = false; - state->cc = CCLOGIC_CC_UNKNOWN; - state->evt = CCLOGIC_EVENT_DETACHED; - state->device = CCLOGIC_DEVICE_UNKNOWN; - state->charger = CCLOGIC_CURRENT_NONE; - - mdelay(10); - - ret = i2c_master_recv(client, reg, MAX_REG_NUM); - if (ret < 0) { - dev_err(&client->dev,"cclogic:%s-->i2c recv error\n", __func__); - return ret; - } - pr_debug("cclogic:%s-->i2c reg value: 0x%02x 0x%02x 0x%02x 0x%02x\n", - __func__,reg[0],reg[1],reg[2],reg[3]); - - reg3 = reg[REG_INTERRUPT]; - reg4 = reg[REG_CC_STATE]; - - if(repeat_times > 3){ - repeat_times = 0; - } - - switch(reg3){ - case 0x01: - switch(reg4){ - case 0x00: - repeat_times = 0; - audio_accessory_flag = 0; - debug_accessory_flag = 0; - ret = 0; - break; - case 0x05: - case 0x06: - if(repeat_times>=2){ - repeat_times = 0; - mdelay(50); - //Device Plug in - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - }else{ - repeat_times++; - mdelay(240); - - ret = pi5usb30216_write_i2c(client,REG_CONTROL, - PORT_SETTING_INTERRUPT_MASK);//0x01 - if(ret){ - dev_err(&client->dev,"cclogic:%s-->i2c write error\n", - __func__); - return ret; - } - mdelay(100); - - ret = pi5usb30216_write_i2c(client,REG_CONTROL,\ - CHARGING_CURRENT_MODE_DEFAULT|\ - PORT_SETTING_DUALROLE|\ - PORT_SETTING_INTERRUPT_NOMASK);//0x04 - if(ret){ - dev_err(&client->dev,"cclogic:%s-->i2c write error\n", - __func__); - return ret; - } - ret = -1; - } - break; - case 0x13: - if(repeat_times >= 1){ - repeat_times = 0; - mdelay(50); - debug_accessory_flag = 1; - //Debug Plug in - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - }else{ - repeat_times++; - //p2_3 = 0; - debug_accessory_flag = 0; - mdelay(240); - - ret = pi5usb30216_write_i2c(client,REG_CONTROL, - PORT_SETTING_INTERRUPT_MASK);//0x01 - if(ret){ - dev_err(&client->dev,"cclogic:%s-->i2c write error\n", - __func__); - return ret; - } - mdelay(100); - - ret = pi5usb30216_write_i2c(client,REG_CONTROL,\ - CHARGING_CURRENT_MODE_DEFAULT|\ - PORT_SETTING_DUALROLE|\ - PORT_SETTING_INTERRUPT_NOMASK);//0x04 - if(ret){ - dev_err(&client->dev,"cclogic:%s-->i2c write error\n", - __func__); - return ret; - } - ret = 0; - } - break; - case 0xa8: - ret = 0; - break; - case 0x0f: - audio_accessory_flag=1; - mdelay(50); - //Audio Plug in - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - case 0x93: - if(debug_accessory_flag){ - reg4 &= 0x7f; - } - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - case 0x8f: - if(audio_accessory_flag){ - reg4 &= 0x7f; - } - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - case 0xa9: - case 0xaa: - case 0xc9: - case 0xca: - case 0xe9: - case 0xea: - //Host plug in - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - default: - ret = -1; - break; - } - break; - case 0x00: - switch(reg4){ - case 0x00: - repeat_times = 0; - audio_accessory_flag = 0; - debug_accessory_flag = 0; - ret = 0; - break; - case 0x97: - if(debug_accessory_flag || audio_accessory_flag){ - mdelay(100); - ret = 0; - }else if(repeat_times>=3){ - repeat_times = 0; - ret = 0; - }else{ - repeat_times++; - mdelay(240); - - ret = pi5usb30216_write_i2c(client,REG_CONTROL, - PORT_SETTING_INTERRUPT_MASK);//0x01 - if(ret){ - dev_err(&client->dev,"cclogic:%s-->i2c write error\n", - __func__); - return ret; - } - mdelay(100); - - ret = pi5usb30216_write_i2c(client,REG_CONTROL,\ - CHARGING_CURRENT_MODE_DEFAULT|\ - PORT_SETTING_DUALROLE|\ - PORT_SETTING_INTERRUPT_NOMASK);//0x04 - if(ret){ - dev_err(&client->dev,"cclogic:%s-->i2c write error\n", - __func__); - return ret; - } - ret = 0; - } - break; - case 0x93: - if(debug_accessory_flag){ - reg4 &= 0x7f; - } - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - case 0x8f: - if(audio_accessory_flag){ - reg4 &= 0x7f; - } - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - case 0xa9: - case 0xaa: - case 0xc9: - case 0xca: - case 0xe9: - case 0xea: - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - case 0x04: - case 0x05: - case 0x06: - default: - ret = -1; - break; - } - break; - case 0x02: - audio_accessory_flag = 0; - debug_accessory_flag = 0; - repeat_times=0; - pi5usb30216_parse_cclogic_state(reg3,reg4,state); - ret = 0; - break; - default: - audio_accessory_flag = 0; - debug_accessory_flag = 0; - repeat_times=0; - ret = 0; - break; - } - - return ret; -} - -/** - * pi5usb30216_check_chip() - */ -static int pi5usb30216_check_chip(struct i2c_client *client) -{ - int ret; - char reg_test_w[MAX_REG_NUM] = {0}; - char reg_test_r[MAX_REG_NUM] = {0}; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - /* ID check */ - ret = i2c_master_recv(client, reg_test_r, 2); - if(ret<0){ - dev_err(&client->dev,"cclogic:%s: i2c read error\n", __func__); - return ret; - } - - if(reg_test_r[REG_ID] != PIUSB30216_DEVID){ - dev_err(&client->dev,"cclogic:%s: devid mismatch" - " (0x%02x!=0x%02x)\n", __func__,reg_test_r[REG_ID], - PIUSB30216_DEVID); - return -ENODEV; - } - - /* i2c R/W test */ - reg_test_w[REG_CONTROL] = 0x55; - ret = i2c_master_send(client, reg_test_w, 2); - if (ret < 0) { - dev_err(&client->dev,"cclogic:%s:i2c write error\n", __func__); - return ret; - } - - ret = i2c_master_recv(client, reg_test_r, 2); - if (ret < 0) { - dev_err(&client->dev,"cclogic:%s:i2c read error\n", __func__); - return ret; - } - if(reg_test_r[REG_CONTROL]!=0x55){ - dev_err(&client->dev,"cclogic:%s:i2c reg r/w test failed\n", - __func__); - return -ENODEV; - } - - return 0; - -} - -/** - * pi5usb30216_reset_chip() - */ -static int pi5usb30216_reset_chip(struct i2c_client *client) -{ - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - return 0; -} - -/** - * pi5usb30216_config_chip() - */ -static int pi5usb30216_config_chip(struct i2c_client *client) -{ - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - ret = pi5usb30216_write_i2c(client,REG_CONTROL, - CHARGING_CURRENT_MODE_DEFAULT|PORT_SETTING_DUALROLE|\ - PORT_SETTING_INTERRUPT_NOMASK); - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - - return 0; -} - -static struct cclogic_chip pi5usb30216_chip = { - .chip_name = DRIVER_NAME, - .get_state = pi5usb30216_get_state, - .ack_irq = NULL, - .chip_config = pi5usb30216_config_chip, - .chip_reset = pi5usb30216_reset_chip, - .chip_check = pi5usb30216_check_chip, - .typec_version = 10,//spec 1.0 - .support = 0, -}; - -/** - * pi5usb30216_init() - */ -static int __init pi5usb30216_init(void) -{ - pr_info("cclogic:[%s][%d]\n", __func__, __LINE__); - - return cclogic_register(&pi5usb30216_chip); -} - -/** - * pi5usb30216_exit() - */ -static void __exit pi5usb30216_exit(void) -{ - pr_info("cclogic:[%s][%d]\n", __func__, __LINE__); - - cclogic_unregister(&pi5usb30216_chip); - return; -} - -late_initcall(pi5usb30216_init); -module_exit(pi5usb30216_exit); - -MODULE_LICENSE("Dual BSD/GPL"); -MODULE_AUTHOR("Yang ShaoYing <yangsy2@lenovo.com>"); -MODULE_DESCRIPTION("Drivers for Type-C CC-Logic chip of Pericom Pi5usb30216"); -MODULE_ALIAS("platform:cc-logic"); diff --git a/drivers/misc/cclogic/ptn5150h.c b/drivers/misc/cclogic/ptn5150h.c deleted file mode 100644 index f073afa56790..000000000000 --- a/drivers/misc/cclogic/ptn5150h.c +++ /dev/null @@ -1,398 +0,0 @@ -// -// ptn5150.c -// -// Drivers for usb type-C interface's CC-Logic chip of TI -// -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/io.h> -#include <asm/uaccess.h> -#include <linux/fs.h> -#include <linux/slab.h> -#include <linux/init.h> -#include <linux/i2c.h> -#include <linux/i2c-dev.h> -#include <linux/interrupt.h> -#include <linux/delay.h> -#include <linux/input.h> -#include <linux/gpio.h> -#include <linux/miscdevice.h> -#include <linux/regulator/consumer.h> -#include <linux/of_gpio.h> -#include <linux/wakelock.h> -#include "cclogic-core.h" - - -#define DRIVER_NAME "nxp,ptn5150h" - -#define PTN5150_DEVID 0xb - -/** - * ptn5150_read_i2c() - */ -static int ptn5150_read_i2c(struct i2c_client *client, u8 reg) -{ - struct i2c_msg msg[2]; - int data=0; - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - if (!client->adapter) - return -ENODEV; - - msg[0].addr = client->addr; - msg[0].flags = 0; - msg[0].buf = ® - msg[0].len = sizeof(reg); - msg[1].addr = client->addr; - msg[1].flags = I2C_M_RD; - msg[1].buf = (char *)&data; - msg[1].len = 1; - - - ret = i2c_transfer(client->adapter, msg, 2); - if (ret != 2){ - dev_err(&client->dev,"cclogic:%s-->i2c_transfer error\n", - __func__); - return ret; - } - - return data; -} - -/** - * ptn5150_recv_i2c() - */ -static int ptn5150_recv_i2c(struct i2c_client *client, char baseaddr, - char * buf, int len) -{ - struct i2c_msg msg[2]; - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - if (!client->adapter) - return -ENODEV; - - msg[0].addr = client->addr; - msg[0].flags = 0; - msg[0].buf = &baseaddr; - msg[0].len = 1; - msg[1].addr = client->addr; - msg[1].flags = I2C_M_RD; - msg[1].buf = buf; - msg[1].len = len; - - - ret = i2c_transfer(client->adapter, msg, 2); - if (ret != 2){ - dev_err(&client->dev,"cclogic:%s-->i2c_transfer error\n", - __func__); - return ret; - } - - return 0; -} -/** - * ptn5150_write_i2c() - */ -static int ptn5150_write_i2c(struct i2c_client *client, u8 reg, u8 data) -{ - int ret = 0; - struct i2c_msg msg; - u8 buf[2]; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - if (!client->adapter) - return -ENODEV; - - buf[0] = reg; - buf[1] = data; - msg.addr = client->addr; - msg.flags = 0; - msg.buf = buf; - msg.len = sizeof(buf); - - ret = i2c_transfer(client->adapter, &msg, 1); - if (ret != 1){ - dev_err(&client->dev,"cclogic:%s-->i2c_transfer error\n", - __func__); - return ret; - } - - return 0; - -} - -/** - * ptn5150_parse_cclogic_state() - */ -static void ptn5150_parse_cclogic_state(int reg3, int reg4, int reg19, - struct cclogic_state *result) -{ - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - result->vbus = false; - result->cc = CCLOGIC_CC_UNKNOWN; - result->evt = CCLOGIC_EVENT_NONE; - result->device = CCLOGIC_NO_DEVICE; - result->charger = CCLOGIC_CURRENT_NONE; - - if(reg3&0x2){//No interrupt - result->evt = CCLOGIC_EVENT_DETACHED; - }else if(reg3&0x1){ - result->evt = CCLOGIC_EVENT_ATTACHED; - }else - result->evt = CCLOGIC_EVENT_NONE; - - switch(reg4&0x3){ - case 0x0: - result->cc = CCLOGIC_CC_UNKNOWN;break; - case 0x1: - result->cc = CCLOGIC_CC1;break; - case 0x2: - result->cc = CCLOGIC_CC2;break; - case 0x3: - result->cc = CCLOGIC_CC1_CC2;break; - } - - switch(reg4&0x60){ - case 0x00: - result->charger = CCLOGIC_CURRENT_NONE; - break; - case 0x20: - result->charger = CCLOGIC_CURRENT_DEFAULT; - break; - case 0x40: - result->charger = CCLOGIC_CURRENT_MEDIUM; - break; - case 0x60: - result->charger = CCLOGIC_CURRENT_HIGH; - break; - } - - if(reg4&0x80) - result->vbus = true; - - switch(reg4&0x1C){ - case 0x00: - result->device = CCLOGIC_NO_DEVICE;break; - case 0x04: - result->device = CCLOGIC_USB_HOST;break; - case 0x08: - result->device = CCLOGIC_USB_DEVICE;break; - case 0x0C: - result->device = CCLOGIC_AUDIO_DEVICE;break; - case 0x10: - result->device = CCLOGIC_DEBUG_DEVICE;break; - } -} - -/** - * ptn5150_reset_chip() - */ -static int ptn5150_reset_chip(struct i2c_client *client) -{ - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - ret = ptn5150_write_i2c(client,0x10,0x1); - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - - mdelay(20); - - return ret; -} - -#if 0 -/** - * ptn5150_trymode() - */ -static int ptn5150_trymode(struct i2c_client *client, int mode) -{ - int ret; - int regval; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - regval = ptn5150_read_i2c(client,0xa); - if(regval<0){ - dev_err(&client->dev,"cclogic:%s: i2c read error\n", - __func__); - return regval; - } - - if(mode == CCLOGIC_MODE_UFP){ - regval = (regval&0xf9) | 0x02; - }else{ - regval = (regval&0xf9) | 0x06; - } - ret = ptn5150_write_i2c(client,0xa,regval); - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - - return ret; - -} -#endif - - -/** - * ptn5150_config_chip() - */ -static int ptn5150_config_chip(struct i2c_client *client) -{ - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - ret = ptn5150_write_i2c(client,0x09,0x1);//disable con_det output - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - ret = ptn5150_write_i2c(client,0x43,0x40); - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - ret = ptn5150_write_i2c(client,0x4c,0x34); - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - ret = ptn5150_write_i2c(client,0x2,0x4);//charger:default unmask interrupt - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - ret = ptn5150_write_i2c(client,0x18,0x00);//unmask interrupt - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - - return ret; - -} - -/** - * ptn5150_check_chip() - */ -static int ptn5150_check_chip(struct i2c_client *client) -{ - char buf; - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - /* ID check */ - ret = ptn5150_recv_i2c(client, 1, &buf, 1); - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c recv error\n", __func__); - return -ENODEV; - } - - if(buf != PTN5150_DEVID){ - dev_err(&client->dev,"cclogic:%s: device version mismatch (%x != %x)\n", - __func__,buf,PTN5150_DEVID); - return -ENODEV; - } - - return 0; -} - -/** - * ptn5150_get_state() - */ -static int ptn5150_get_state(struct i2c_client *client, - struct cclogic_state *state) -{ - int reg3,reg4,reg19; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - reg3 = ptn5150_read_i2c(client,0x3); - if(reg3<0){ - dev_err(&client->dev,"cclogic:%s-->i2c read error,reg3=%d\n", - __func__,reg3); - return reg3; - } - - reg4 = ptn5150_read_i2c(client,0x4); - if(reg4<0){ - dev_err(&client->dev,"cclogic:%s-->i2c read error,reg4=%d\n", - __func__,reg4); - return reg4; - } - - reg19 = ptn5150_read_i2c(client,0x19); - if(reg19<0){ - dev_err(&client->dev,"cclogic:%s-->i2c read error,reg19=%d\n", - __func__,reg19); - return reg19; - } - - - pr_debug("cclogic:%s-->i2c register value: reg3=0x%02x reg4=0x%02x reg19=0x%02x\n", - __func__,reg3,reg4,reg19); - - ptn5150_parse_cclogic_state(reg3,reg4,reg19,state); - - return 0; -} - - -static struct cclogic_chip ptn5150_chip = { - .chip_name = DRIVER_NAME, - .get_state = ptn5150_get_state, - .ack_irq = NULL, - .chip_config = ptn5150_config_chip, - .chip_reset = ptn5150_reset_chip, - .chip_check = ptn5150_check_chip, -#if 0 - .chip_trymode = ptn5150_trymode, - .typec_version = 11,//spec 1.1 - .support = CCLOGIC_SUPPORT_MODE_DUAL, -#else - .typec_version = 10,//spec 1.0 -#endif -}; - -/** - * ptn5150_init() - */ -static int __init ptn5150_init(void) -{ - pr_info("cclogic:[%s][%d]\n", __func__, __LINE__); - - return cclogic_register(&ptn5150_chip); -} - -/** - * ptn5150_exit() - */ -static void __exit ptn5150_exit(void) -{ - pr_info("cclogic:[%s][%d]\n", __func__, __LINE__); - - cclogic_unregister(&ptn5150_chip); - return; -} - -late_initcall(ptn5150_init); -module_exit(ptn5150_exit); - - -MODULE_LICENSE("Dual BSD/GPL"); -MODULE_AUTHOR("Yang ShaoYing <yangsy2@lenovo.com>"); -MODULE_DESCRIPTION("Drivers for usb type-C CC-Logic chip of NXP5150H"); -MODULE_ALIAS("platform:cc-logic"); diff --git a/drivers/misc/cclogic/tusb320.c b/drivers/misc/cclogic/tusb320.c deleted file mode 100644 index e6fd1715c36c..000000000000 --- a/drivers/misc/cclogic/tusb320.c +++ /dev/null @@ -1,423 +0,0 @@ -// -// tusb320.c -// -// Drivers for usb type-C interface's CC-Logic chip of TI -// -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/io.h> -#include <asm/uaccess.h> -#include <linux/fs.h> -#include <linux/slab.h> -#include <linux/init.h> -#include <linux/i2c.h> -#include <linux/i2c-dev.h> -#include <linux/interrupt.h> -#include <linux/delay.h> -#include <linux/input.h> -#include <linux/gpio.h> -#include <linux/miscdevice.h> -#include <linux/regulator/consumer.h> -#include <linux/of_gpio.h> -#include <linux/wakelock.h> -#include "cclogic-core.h" - - -#define DRIVER_NAME "ti,tusb320" - -#define MAX_REG_NUM 11 - -#define TUSB320_DEVID "023BSUT" - -/** - * tusb320_read_i2c() - */ -static int tusb320_read_i2c(struct i2c_client *client, u8 reg) -{ - struct i2c_msg msg[2]; - int data=0; - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - if (!client->adapter) - return -ENODEV; - - msg[0].addr = client->addr; - msg[0].flags = 0; - msg[0].buf = ® - msg[0].len = sizeof(reg); - msg[1].addr = client->addr; - msg[1].flags = I2C_M_RD; - msg[1].buf = (char *)&data; - msg[1].len = 1; - - - ret = i2c_transfer(client->adapter, msg, 2); - if (ret != 2){ - dev_err(&client->dev,"cclogic:%s-->i2c_transfer error\n", - __func__); - return ret; - } - - return data; -} - -/** - * tusb320_recv_i2c() - */ -static int tusb320_recv_i2c(struct i2c_client *client, char baseaddr, - char * buf, int len) -{ - struct i2c_msg msg[2]; - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - if (!client->adapter) - return -ENODEV; - - msg[0].addr = client->addr; - msg[0].flags = 0; - msg[0].buf = &baseaddr; - msg[0].len = 1; - msg[1].addr = client->addr; - msg[1].flags = I2C_M_RD; - msg[1].buf = buf; - msg[1].len = len; - - - ret = i2c_transfer(client->adapter, msg, 2); - if (ret != 2){ - dev_err(&client->dev,"cclogic:%s-->i2c_transfer error\n", - __func__); - return ret; - } - - return 0; -} -/** - * tusb320_write_i2c() - */ -static int tusb320_write_i2c(struct i2c_client *client, u8 reg, u8 data) -{ - int ret = 0; - struct i2c_msg msg; - u8 buf[2]; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - if (!client->adapter) - return -ENODEV; - - buf[0] = reg; - buf[1] = data; - msg.addr = client->addr; - msg.flags = 0; - msg.buf = buf; - msg.len = sizeof(buf); - - ret = i2c_transfer(client->adapter, &msg, 1); - if (ret != 1){ - dev_err(&client->dev,"cclogic:%s-->i2c_transfer error\n", - __func__); - return ret; - } - - return 0; - -} - -/** - * tusb320_parse_cclogic_state() - */ -static void tusb320_parse_cclogic_state(int reg8, int reg9, - struct cclogic_state *result) -{ - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - result->vbus = false; - result->cc = CCLOGIC_CC_UNKNOWN; - result->evt = CCLOGIC_EVENT_NONE; - result->device = CCLOGIC_NO_DEVICE; - result->charger = CCLOGIC_CURRENT_NONE; - - if(!(reg9&0x10)){//No interrupt - result->evt = CCLOGIC_EVENT_NONE; - }else{ - result->evt = CCLOGIC_EVENT_ATTACHED; - } - - if(reg9&0x20){ - result->cc = CCLOGIC_CC2; - }else{ - result->cc = CCLOGIC_CC1; - } - - switch(reg9&0xc0){ - case 0x00://nothing attached - if(reg9&0x10){ - result->evt = CCLOGIC_EVENT_DETACHED; - } - result->vbus = false; - result->device = CCLOGIC_NO_DEVICE; - break; - case 0x40: - result->device = CCLOGIC_USB_DEVICE; - result->vbus = false; - break; - case 0x80: - result->device = CCLOGIC_USB_HOST; - result->vbus = true; - break; - case 0xC0://accessory - switch(reg8&0x0e){ - case 0x00: //No Accessory attached - if(reg9&0x10){ - result->evt = CCLOGIC_EVENT_DETACHED; - } - result->vbus = false; - result->device = CCLOGIC_NO_DEVICE; - break; - case 0x08: //Audio Accessory DFP - result->vbus = false; - result->device = CCLOGIC_AUDIO_DEVICE; - break; - case 0x0a: //Audio Accessory UFP - result->vbus = true; - result->device = CCLOGIC_AUDIO_DEVICE; - break; - case 0x0e:// Debug Accessory UFP - result->vbus = true; - result->device = CCLOGIC_DEBUG_DEVICE; - break; - case 0x0c:// Debug Accessory DFP set to Hi-Z - result->vbus = false; - result->device = CCLOGIC_DEBUG_DEVICE; - break; - default://Reserve - result->vbus = false; - result->device = CCLOGIC_NO_DEVICE; - break; - } - - break; - } - - - switch(reg8&0x30){ - case 0x00: - result->charger = CCLOGIC_CURRENT_DEFAULT; - break; - case 0x10: - result->charger = CCLOGIC_CURRENT_MEDIUM; - break; - case 0x20: - result->charger = CCLOGIC_CURRENT_ACCESSORY; - //result->vbus = false; - break; - case 0x30: - result->charger = CCLOGIC_CURRENT_HIGH; - break; - } - -} - -/** - * tusb320_reset_chip() - */ -static int tusb320_reset_chip(struct i2c_client *client) -{ - int retries = 10; - int regval; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - regval = tusb320_write_i2c(client,0xa,0x8); - if(regval){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return regval; - } - - while(retries--){ - regval = tusb320_read_i2c(client,0xa); - if(regval<0){ - dev_err(&client->dev,"cclogic:%s: i2c read error\n", - __func__); - return regval; - } - if(!(regval&0x08)){ - return 0; - } - mdelay(100); - } - if(regval&0x08){ - return -1; - } - return 0; - -} - -/** - * tusb320_config_chip() - */ -static int tusb320_config_chip(struct i2c_client *client) -{ - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - ret = tusb320_write_i2c(client,0x8,0);//charger:default - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - ret = tusb320_write_i2c(client,0xa,0x30);//DRP - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c write error\n", __func__); - return ret; - } - - return ret; - -} - -/** - * tusb320_check_chip() - */ -static int tusb320_check_chip(struct i2c_client *client) -{ - char buf[8]; - int ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - /* ID check */ - ret = tusb320_recv_i2c(client, 0, buf, 8); - if(ret){ - dev_err(&client->dev,"cclogic:%s: i2c recv error\n", __func__); - return -ENODEV; - } - - if(memcmp(buf,TUSB320_DEVID,sizeof(TUSB320_DEVID))){ - dev_err(&client->dev,"cclogic:%s: devid mismatch (%s != %s)\n", - __func__,buf,TUSB320_DEVID); - return -ENODEV; - } - - return 0; -} - -/** - * tusb320_ack_irq() - */ -static int tusb320_ack_irq(struct i2c_client *client) -{ - int reg9,ret; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - reg9 = tusb320_read_i2c(client,0x9); - if(reg9<0){ - dev_err(&client->dev,"cclogic:%s-->i2c read error\n", __func__); - return reg9; - } - - /* clear interrupt */ - ret = tusb320_write_i2c(client,0x9,reg9); - if(ret){ - dev_err(&client->dev,"cclogic:%s-->i2c write error\n",__func__); - return ret; - } - - return 0; -} - -/** - * tusb320_get_state() - */ -static int tusb320_get_state(struct i2c_client *client, - struct cclogic_state *state) -{ - int reg8,reg9; - static int flag = 0; - - pr_debug("cclogic:[%s][%d]\n", __func__, __LINE__); - - reg9 = tusb320_read_i2c(client,0x9); - if(reg9<0){ - dev_err(&client->dev,"cclogic:%s-->i2c read error,reg9=%d\n", - __func__,reg9); - return reg9; - } - - reg8 = tusb320_read_i2c(client,0x8); - if(reg8<0){ - dev_err(&client->dev,"cclogic:%s-->i2c read error,reg8=%d\n", - __func__,reg8); - return reg8; - } - - pr_debug("cclogic:%s-->i2c register value: reg8=0x%02x reg9=0x%02x\n", - __func__,reg8,reg9); - - tusb320_parse_cclogic_state(reg8,reg9,state); - -#if 1 //for chip bug - if(state->evt == CCLOGIC_EVENT_DETACHED){//skip detach event - return 0; - } - - if(!flag && (state->device == CCLOGIC_USB_DEVICE)){ - tusb320_reset_chip(client); - flag = 1; - return -1; - } - - flag = 0; -#endif - - return 0; -} - - -static struct cclogic_chip tusb320_chip = { - .chip_name = DRIVER_NAME, - .get_state = tusb320_get_state, - .ack_irq = tusb320_ack_irq, - .chip_config = tusb320_config_chip, - .chip_reset = tusb320_reset_chip, - .chip_check = tusb320_check_chip, - .typec_version = 10,//spec 1.0 - .support = 0, -}; - -/** - * tusb320_init() - */ -static int __init tusb320_init(void) -{ - pr_info("cclogic:[%s][%d]\n", __func__, __LINE__); - - return cclogic_register(&tusb320_chip); -} - -/** - * tusb320_exit() - */ -static void __exit tusb320_exit(void) -{ - pr_info("cclogic:[%s][%d]\n", __func__, __LINE__); - - cclogic_unregister(&tusb320_chip); - return; -} - -late_initcall(tusb320_init); -module_exit(tusb320_exit); - - -MODULE_LICENSE("Dual BSD/GPL"); -MODULE_AUTHOR("Yang ShaoYing <yangsy2@lenovo.com>"); -MODULE_DESCRIPTION("Drivers for usb type-C CC-Logic chip of TI Tusb320"); -MODULE_ALIAS("platform:cc-logic"); |
