Loading Documentation/devicetree/bindings/regulator/max8973-regulator.txt +6 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,12 @@ Optional properties: -maxim,enable-frequency-shift: boolean, enable 9% frequency shift. -maxim,enable-bias-control: boolean, enable bias control. By enabling this startup delay can be reduce to 20us from 220us. -maxim,enable-etr: boolean, enable Enhanced Transient Response. -maxim,enable-high-etr-sensitivity: boolean, Enhanced transient response circuit is enabled and set for high sensitivity. If this property is available then etr will be enable default. Enhanced transient response (ETR) will affect the configuration of CKADV. Example: Loading drivers/extcon/extcon-max77693.c +40 −54 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <linux/err.h> #include <linux/platform_device.h> #include <linux/mfd/max77693.h> #include <linux/mfd/max77693-common.h> #include <linux/mfd/max77693-private.h> #include <linux/extcon.h> #include <linux/regmap.h> Loading @@ -42,7 +43,7 @@ static struct max77693_reg_data default_init_data[] = { { /* STATUS2 - [3]ChgDetRun */ .addr = MAX77693_MUIC_REG_STATUS2, .data = STATUS2_CHGDETRUN_MASK, .data = MAX77693_STATUS2_CHGDETRUN_MASK, }, { /* INTMASK1 - Unmask [3]ADC1KM,[0]ADCM */ .addr = MAX77693_MUIC_REG_INTMASK1, Loading Loading @@ -235,7 +236,7 @@ static int max77693_muic_set_debounce_time(struct max77693_muic_info *info, */ ret = regmap_write(info->max77693->regmap_muic, MAX77693_MUIC_REG_CTRL3, time << CONTROL3_ADCDBSET_SHIFT); time << MAX77693_CONTROL3_ADCDBSET_SHIFT); if (ret) { dev_err(info->dev, "failed to set ADC debounce time\n"); return ret; Loading Loading @@ -268,7 +269,7 @@ static int max77693_muic_set_path(struct max77693_muic_info *info, if (attached) ctrl1 = val; else ctrl1 = CONTROL1_SW_OPEN; ctrl1 = MAX77693_CONTROL1_SW_OPEN; ret = regmap_update_bits(info->max77693->regmap_muic, MAX77693_MUIC_REG_CTRL1, COMP_SW_MASK, ctrl1); Loading @@ -278,13 +279,14 @@ static int max77693_muic_set_path(struct max77693_muic_info *info, } if (attached) ctrl2 |= CONTROL2_CPEN_MASK; /* LowPwr=0, CPEn=1 */ ctrl2 |= MAX77693_CONTROL2_CPEN_MASK; /* LowPwr=0, CPEn=1 */ else ctrl2 |= CONTROL2_LOWPWR_MASK; /* LowPwr=1, CPEn=0 */ ctrl2 |= MAX77693_CONTROL2_LOWPWR_MASK; /* LowPwr=1, CPEn=0 */ ret = regmap_update_bits(info->max77693->regmap_muic, MAX77693_MUIC_REG_CTRL2, CONTROL2_LOWPWR_MASK | CONTROL2_CPEN_MASK, ctrl2); MAX77693_CONTROL2_LOWPWR_MASK | MAX77693_CONTROL2_CPEN_MASK, ctrl2); if (ret < 0) { dev_err(info->dev, "failed to update MUIC register\n"); return ret; Loading Loading @@ -326,8 +328,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read ADC value to check cable type and decide cable state * according to cable type */ adc = info->status[0] & STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; adc >>= MAX77693_STATUS1_ADC_SHIFT; /* * Check current cable state/cable type and store cable type Loading @@ -350,8 +352,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read ADC value to check cable type and decide cable state * according to cable type */ adc = info->status[0] & STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; adc >>= MAX77693_STATUS1_ADC_SHIFT; /* * Check current cable state/cable type and store cable type Loading @@ -366,13 +368,13 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, } else { *attached = true; adclow = info->status[0] & STATUS1_ADCLOW_MASK; adclow >>= STATUS1_ADCLOW_SHIFT; adc1k = info->status[0] & STATUS1_ADC1K_MASK; adc1k >>= STATUS1_ADC1K_SHIFT; adclow = info->status[0] & MAX77693_STATUS1_ADCLOW_MASK; adclow >>= MAX77693_STATUS1_ADCLOW_SHIFT; adc1k = info->status[0] & MAX77693_STATUS1_ADC1K_MASK; adc1k >>= MAX77693_STATUS1_ADC1K_SHIFT; vbvolt = info->status[1] & STATUS2_VBVOLT_MASK; vbvolt >>= STATUS2_VBVOLT_SHIFT; vbvolt = info->status[1] & MAX77693_STATUS2_VBVOLT_MASK; vbvolt >>= MAX77693_STATUS2_VBVOLT_SHIFT; /** * [0x1|VBVolt|ADCLow|ADC1K] Loading @@ -397,8 +399,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read charger type to check cable type and decide cable state * according to type of charger cable. */ chg_type = info->status[1] & STATUS2_CHGTYP_MASK; chg_type >>= STATUS2_CHGTYP_SHIFT; chg_type = info->status[1] & MAX77693_STATUS2_CHGTYP_MASK; chg_type >>= MAX77693_STATUS2_CHGTYP_SHIFT; if (chg_type == MAX77693_CHARGER_TYPE_NONE) { *attached = false; Loading @@ -422,10 +424,10 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read ADC value to check cable type and decide cable state * according to cable type */ adc = info->status[0] & STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; chg_type = info->status[1] & STATUS2_CHGTYP_MASK; chg_type >>= STATUS2_CHGTYP_SHIFT; adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; adc >>= MAX77693_STATUS1_ADC_SHIFT; chg_type = info->status[1] & MAX77693_STATUS2_CHGTYP_MASK; chg_type >>= MAX77693_STATUS2_CHGTYP_SHIFT; if (adc == MAX77693_MUIC_ADC_OPEN && chg_type == MAX77693_CHARGER_TYPE_NONE) Loading @@ -437,8 +439,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read vbvolt field, if vbvolt is 1, * this cable is used for charging. */ vbvolt = info->status[1] & STATUS2_VBVOLT_MASK; vbvolt >>= STATUS2_VBVOLT_SHIFT; vbvolt = info->status[1] & MAX77693_STATUS2_VBVOLT_MASK; vbvolt >>= MAX77693_STATUS2_VBVOLT_SHIFT; cable_type = vbvolt; break; Loading Loading @@ -520,7 +522,8 @@ static int max77693_muic_dock_handler(struct max77693_muic_info *info, } /* Dock-Car/Desk/Audio, PATH:AUDIO */ ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, attached); ret = max77693_muic_set_path(info, MAX77693_CONTROL1_SW_AUDIO, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, dock_id, attached); Loading Loading @@ -585,14 +588,16 @@ static int max77693_muic_adc_ground_handler(struct max77693_muic_info *info) case MAX77693_MUIC_GND_USB_HOST: case MAX77693_MUIC_GND_USB_HOST_VB: /* USB_HOST, PATH: AP_USB */ ret = max77693_muic_set_path(info, CONTROL1_SW_USB, attached); ret = max77693_muic_set_path(info, MAX77693_CONTROL1_SW_USB, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, attached); break; case MAX77693_MUIC_GND_AV_CABLE_LOAD: /* Audio Video Cable with load, PATH:AUDIO */ ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, attached); ret = max77693_muic_set_path(info, MAX77693_CONTROL1_SW_AUDIO, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_USB, attached); Loading @@ -615,7 +620,7 @@ static int max77693_muic_jig_handler(struct max77693_muic_info *info, int cable_type, bool attached) { int ret = 0; u8 path = CONTROL1_SW_OPEN; u8 path = MAX77693_CONTROL1_SW_OPEN; dev_info(info->dev, "external connector is %s (adc:0x%02x)\n", Loading @@ -625,12 +630,12 @@ static int max77693_muic_jig_handler(struct max77693_muic_info *info, case MAX77693_MUIC_ADC_FACTORY_MODE_USB_OFF: /* ADC_JIG_USB_OFF */ case MAX77693_MUIC_ADC_FACTORY_MODE_USB_ON: /* ADC_JIG_USB_ON */ /* PATH:AP_USB */ path = CONTROL1_SW_USB; path = MAX77693_CONTROL1_SW_USB; break; case MAX77693_MUIC_ADC_FACTORY_MODE_UART_OFF: /* ADC_JIG_UART_OFF */ case MAX77693_MUIC_ADC_FACTORY_MODE_UART_ON: /* ADC_JIG_UART_ON */ /* PATH:AP_UART */ path = CONTROL1_SW_UART; path = MAX77693_CONTROL1_SW_UART; break; default: dev_err(info->dev, "failed to detect %s jig cable\n", Loading Loading @@ -1077,7 +1082,7 @@ static int max77693_muic_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "allocate register map\n"); } else { info->max77693->regmap_muic = devm_regmap_init_i2c( info->max77693->muic, info->max77693->i2c_muic, &max77693_muic_regmap_config); if (IS_ERR(info->max77693->regmap_muic)) { ret = PTR_ERR(info->max77693->regmap_muic); Loading Loading @@ -1164,28 +1169,9 @@ static int max77693_muic_probe(struct platform_device *pdev) } for (i = 0; i < num_init_data; i++) { enum max77693_irq_source irq_src = MAX77693_IRQ_GROUP_NR; regmap_write(info->max77693->regmap_muic, init_data[i].addr, init_data[i].data); switch (init_data[i].addr) { case MAX77693_MUIC_REG_INTMASK1: irq_src = MUIC_INT1; break; case MAX77693_MUIC_REG_INTMASK2: irq_src = MUIC_INT2; break; case MAX77693_MUIC_REG_INTMASK3: irq_src = MUIC_INT3; break; } if (irq_src < MAX77693_IRQ_GROUP_NR) info->max77693->irq_masks_cur[irq_src] = init_data[i].data; } if (pdata && pdata->muic_data) { Loading @@ -1199,12 +1185,12 @@ static int max77693_muic_probe(struct platform_device *pdev) if (muic_pdata->path_uart) info->path_uart = muic_pdata->path_uart; else info->path_uart = CONTROL1_SW_UART; info->path_uart = MAX77693_CONTROL1_SW_UART; if (muic_pdata->path_usb) info->path_usb = muic_pdata->path_usb; else info->path_usb = CONTROL1_SW_USB; info->path_usb = MAX77693_CONTROL1_SW_USB; /* * Default delay time for detecting cable state Loading @@ -1216,8 +1202,8 @@ static int max77693_muic_probe(struct platform_device *pdev) else delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT); } else { info->path_usb = CONTROL1_SW_USB; info->path_uart = CONTROL1_SW_UART; info->path_usb = MAX77693_CONTROL1_SW_USB; info->path_uart = MAX77693_CONTROL1_SW_UART; delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT); } Loading drivers/extcon/extcon-max77843.c +41 −25 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/i2c.h> #include <linux/interrupt.h> #include <linux/kernel.h> #include <linux/mfd/max77693-common.h> #include <linux/mfd/max77843-private.h> #include <linux/module.h> #include <linux/platform_device.h> Loading @@ -32,7 +33,7 @@ enum max77843_muic_status { struct max77843_muic_info { struct device *dev; struct max77843 *max77843; struct max77693_dev *max77843; struct extcon_dev *edev; struct mutex mutex; Loading Loading @@ -198,18 +199,18 @@ static const struct regmap_irq_chip max77843_muic_irq_chip = { static int max77843_muic_set_path(struct max77843_muic_info *info, u8 val, bool attached) { struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int ret = 0; unsigned int ctrl1, ctrl2; if (attached) ctrl1 = val; else ctrl1 = CONTROL1_SW_OPEN; ctrl1 = MAX77843_MUIC_CONTROL1_SW_OPEN; ret = regmap_update_bits(max77843->regmap_muic, MAX77843_MUIC_REG_CONTROL1, CONTROL1_COM_SW, ctrl1); MAX77843_MUIC_CONTROL1_COM_SW, ctrl1); if (ret < 0) { dev_err(info->dev, "Cannot switch MUIC port\n"); return ret; Loading Loading @@ -243,7 +244,7 @@ static int max77843_muic_get_cable_type(struct max77843_muic_info *info, adc = info->status[MAX77843_MUIC_STATUS1] & MAX77843_MUIC_STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; adc >>= MAX77843_MUIC_STATUS1_ADC_SHIFT; switch (group) { case MAX77843_CABLE_GROUP_ADC: Loading Loading @@ -309,7 +310,7 @@ static int max77843_muic_get_cable_type(struct max77843_muic_info *info, /* Get VBVolt register bit */ gnd_type |= (info->status[MAX77843_MUIC_STATUS2] & MAX77843_MUIC_STATUS2_VBVOLT_MASK); gnd_type >>= STATUS2_VBVOLT_SHIFT; gnd_type >>= MAX77843_MUIC_STATUS2_VBVOLT_SHIFT; /* Offset of GND cable */ gnd_type |= MAX77843_MUIC_GND_USB_HOST; Loading Loading @@ -338,7 +339,9 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) switch (gnd_cable_type) { case MAX77843_MUIC_GND_USB_HOST: case MAX77843_MUIC_GND_USB_HOST_VB: ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_USB, attached); if (ret < 0) return ret; Loading @@ -346,7 +349,9 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) break; case MAX77843_MUIC_GND_MHL_VB: case MAX77843_MUIC_GND_MHL: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -365,7 +370,7 @@ static int max77843_muic_jig_handler(struct max77843_muic_info *info, int cable_type, bool attached) { int ret; u8 path = CONTROL1_SW_OPEN; u8 path = MAX77843_MUIC_CONTROL1_SW_OPEN; dev_dbg(info->dev, "external connector is %s (adc:0x%02x)\n", attached ? "attached" : "detached", cable_type); Loading @@ -373,10 +378,10 @@ static int max77843_muic_jig_handler(struct max77843_muic_info *info, switch (cable_type) { case MAX77843_MUIC_ADC_FACTORY_MODE_USB_OFF: case MAX77843_MUIC_ADC_FACTORY_MODE_USB_ON: path = CONTROL1_SW_USB; path = MAX77843_MUIC_CONTROL1_SW_USB; break; case MAX77843_MUIC_ADC_FACTORY_MODE_UART_OFF: path = CONTROL1_SW_UART; path = MAX77843_MUIC_CONTROL1_SW_UART; break; default: return -EINVAL; Loading Loading @@ -474,14 +479,18 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) switch (chg_type) { case MAX77843_MUIC_CHG_USB: ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_USB, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_USB, attached); break; case MAX77843_MUIC_CHG_DOWNSTREAM: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -489,14 +498,18 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) attached); break; case MAX77843_MUIC_CHG_DEDICATED: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_TA, attached); break; case MAX77843_MUIC_CHG_SPECIAL_500MA: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -504,7 +517,9 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) attached); break; case MAX77843_MUIC_CHG_SPECIAL_1A: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -528,7 +543,8 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) "failed to detect %s accessory (chg_type:0x%x)\n", attached ? "attached" : "detached", chg_type); max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); return -EINVAL; } Loading @@ -539,7 +555,7 @@ static void max77843_muic_irq_work(struct work_struct *work) { struct max77843_muic_info *info = container_of(work, struct max77843_muic_info, irq_work); struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int ret = 0; mutex_lock(&info->mutex); Loading Loading @@ -615,7 +631,7 @@ static void max77843_muic_detect_cable_wq(struct work_struct *work) { struct max77843_muic_info *info = container_of(to_delayed_work(work), struct max77843_muic_info, wq_detcable); struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int chg_type, adc, ret; bool attached; Loading Loading @@ -656,7 +672,7 @@ static void max77843_muic_detect_cable_wq(struct work_struct *work) static int max77843_muic_set_debounce_time(struct max77843_muic_info *info, enum max77843_muic_adc_debounce_time time) { struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int ret; switch (time) { Loading @@ -667,7 +683,7 @@ static int max77843_muic_set_debounce_time(struct max77843_muic_info *info, ret = regmap_update_bits(max77843->regmap_muic, MAX77843_MUIC_REG_CONTROL4, MAX77843_MUIC_CONTROL4_ADCDBSET_MASK, time << CONTROL4_ADCDBSET_SHIFT); time << MAX77843_MUIC_CONTROL4_ADCDBSET_SHIFT); if (ret < 0) { dev_err(info->dev, "Cannot write MUIC regmap\n"); return ret; Loading @@ -681,7 +697,7 @@ static int max77843_muic_set_debounce_time(struct max77843_muic_info *info, return 0; } static int max77843_init_muic_regmap(struct max77843 *max77843) static int max77843_init_muic_regmap(struct max77693_dev *max77843) { int ret; Loading Loading @@ -720,7 +736,7 @@ static int max77843_init_muic_regmap(struct max77843 *max77843) static int max77843_muic_probe(struct platform_device *pdev) { struct max77843 *max77843 = dev_get_drvdata(pdev->dev.parent); struct max77693_dev *max77843 = dev_get_drvdata(pdev->dev.parent); struct max77843_muic_info *info; unsigned int id; int i, ret; Loading Loading @@ -768,7 +784,7 @@ static int max77843_muic_probe(struct platform_device *pdev) max77843_muic_set_debounce_time(info, MAX77843_DEBOUNCE_TIME_25MS); /* Set initial path for UART */ max77843_muic_set_path(info, CONTROL1_SW_UART, true); max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_UART, true); /* Check revision number of MUIC device */ ret = regmap_read(max77843->regmap_muic, MAX77843_MUIC_REG_ID, &id); Loading Loading @@ -821,7 +837,7 @@ static int max77843_muic_probe(struct platform_device *pdev) static int max77843_muic_remove(struct platform_device *pdev) { struct max77843_muic_info *info = platform_get_drvdata(pdev); struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; cancel_work_sync(&info->irq_work); regmap_del_irq_chip(max77843->irq, max77843->irq_data_muic); Loading drivers/input/misc/Kconfig +3 −15 Original line number Diff line number Diff line Loading @@ -167,28 +167,16 @@ config INPUT_M68K_BEEP depends on M68K config INPUT_MAX77693_HAPTIC tristate "MAXIM MAX77693 haptic controller support" depends on MFD_MAX77693 && PWM tristate "MAXIM MAX77693/MAX77843 haptic controller support" depends on (MFD_MAX77693 || MFD_MAX77843) && PWM select INPUT_FF_MEMLESS help This option enables support for the haptic controller on MAXIM MAX77693 chip. MAXIM MAX77693 and MAX77843 chips. To compile this driver as module, choose M here: the module will be called max77693-haptic. config INPUT_MAX77843_HAPTIC tristate "MAXIM MAX77843 haptic controller support" depends on MFD_MAX77843 && REGULATOR select INPUT_FF_MEMLESS help This option enables support for the haptic controller on MAXIM MAX77843 chip. The driver supports ff-memless interface from input framework. To compile this driver as module, choose M here: the module will be called max77843-haptic. config INPUT_MAX8925_ONKEY tristate "MAX8925 ONKEY support" depends on MFD_MAX8925 Loading drivers/input/misc/Makefile +0 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,6 @@ obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o obj-$(CONFIG_INPUT_KXTJ9) += kxtj9.o obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o obj-$(CONFIG_INPUT_MAX77693_HAPTIC) += max77693-haptic.o obj-$(CONFIG_INPUT_MAX77843_HAPTIC) += max77843-haptic.o obj-$(CONFIG_INPUT_MAX8925_ONKEY) += max8925_onkey.o obj-$(CONFIG_INPUT_MAX8997_HAPTIC) += max8997_haptic.o obj-$(CONFIG_INPUT_MC13783_PWRBUTTON) += mc13783-pwrbutton.o Loading Loading
Documentation/devicetree/bindings/regulator/max8973-regulator.txt +6 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,12 @@ Optional properties: -maxim,enable-frequency-shift: boolean, enable 9% frequency shift. -maxim,enable-bias-control: boolean, enable bias control. By enabling this startup delay can be reduce to 20us from 220us. -maxim,enable-etr: boolean, enable Enhanced Transient Response. -maxim,enable-high-etr-sensitivity: boolean, Enhanced transient response circuit is enabled and set for high sensitivity. If this property is available then etr will be enable default. Enhanced transient response (ETR) will affect the configuration of CKADV. Example: Loading
drivers/extcon/extcon-max77693.c +40 −54 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <linux/err.h> #include <linux/platform_device.h> #include <linux/mfd/max77693.h> #include <linux/mfd/max77693-common.h> #include <linux/mfd/max77693-private.h> #include <linux/extcon.h> #include <linux/regmap.h> Loading @@ -42,7 +43,7 @@ static struct max77693_reg_data default_init_data[] = { { /* STATUS2 - [3]ChgDetRun */ .addr = MAX77693_MUIC_REG_STATUS2, .data = STATUS2_CHGDETRUN_MASK, .data = MAX77693_STATUS2_CHGDETRUN_MASK, }, { /* INTMASK1 - Unmask [3]ADC1KM,[0]ADCM */ .addr = MAX77693_MUIC_REG_INTMASK1, Loading Loading @@ -235,7 +236,7 @@ static int max77693_muic_set_debounce_time(struct max77693_muic_info *info, */ ret = regmap_write(info->max77693->regmap_muic, MAX77693_MUIC_REG_CTRL3, time << CONTROL3_ADCDBSET_SHIFT); time << MAX77693_CONTROL3_ADCDBSET_SHIFT); if (ret) { dev_err(info->dev, "failed to set ADC debounce time\n"); return ret; Loading Loading @@ -268,7 +269,7 @@ static int max77693_muic_set_path(struct max77693_muic_info *info, if (attached) ctrl1 = val; else ctrl1 = CONTROL1_SW_OPEN; ctrl1 = MAX77693_CONTROL1_SW_OPEN; ret = regmap_update_bits(info->max77693->regmap_muic, MAX77693_MUIC_REG_CTRL1, COMP_SW_MASK, ctrl1); Loading @@ -278,13 +279,14 @@ static int max77693_muic_set_path(struct max77693_muic_info *info, } if (attached) ctrl2 |= CONTROL2_CPEN_MASK; /* LowPwr=0, CPEn=1 */ ctrl2 |= MAX77693_CONTROL2_CPEN_MASK; /* LowPwr=0, CPEn=1 */ else ctrl2 |= CONTROL2_LOWPWR_MASK; /* LowPwr=1, CPEn=0 */ ctrl2 |= MAX77693_CONTROL2_LOWPWR_MASK; /* LowPwr=1, CPEn=0 */ ret = regmap_update_bits(info->max77693->regmap_muic, MAX77693_MUIC_REG_CTRL2, CONTROL2_LOWPWR_MASK | CONTROL2_CPEN_MASK, ctrl2); MAX77693_CONTROL2_LOWPWR_MASK | MAX77693_CONTROL2_CPEN_MASK, ctrl2); if (ret < 0) { dev_err(info->dev, "failed to update MUIC register\n"); return ret; Loading Loading @@ -326,8 +328,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read ADC value to check cable type and decide cable state * according to cable type */ adc = info->status[0] & STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; adc >>= MAX77693_STATUS1_ADC_SHIFT; /* * Check current cable state/cable type and store cable type Loading @@ -350,8 +352,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read ADC value to check cable type and decide cable state * according to cable type */ adc = info->status[0] & STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; adc >>= MAX77693_STATUS1_ADC_SHIFT; /* * Check current cable state/cable type and store cable type Loading @@ -366,13 +368,13 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, } else { *attached = true; adclow = info->status[0] & STATUS1_ADCLOW_MASK; adclow >>= STATUS1_ADCLOW_SHIFT; adc1k = info->status[0] & STATUS1_ADC1K_MASK; adc1k >>= STATUS1_ADC1K_SHIFT; adclow = info->status[0] & MAX77693_STATUS1_ADCLOW_MASK; adclow >>= MAX77693_STATUS1_ADCLOW_SHIFT; adc1k = info->status[0] & MAX77693_STATUS1_ADC1K_MASK; adc1k >>= MAX77693_STATUS1_ADC1K_SHIFT; vbvolt = info->status[1] & STATUS2_VBVOLT_MASK; vbvolt >>= STATUS2_VBVOLT_SHIFT; vbvolt = info->status[1] & MAX77693_STATUS2_VBVOLT_MASK; vbvolt >>= MAX77693_STATUS2_VBVOLT_SHIFT; /** * [0x1|VBVolt|ADCLow|ADC1K] Loading @@ -397,8 +399,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read charger type to check cable type and decide cable state * according to type of charger cable. */ chg_type = info->status[1] & STATUS2_CHGTYP_MASK; chg_type >>= STATUS2_CHGTYP_SHIFT; chg_type = info->status[1] & MAX77693_STATUS2_CHGTYP_MASK; chg_type >>= MAX77693_STATUS2_CHGTYP_SHIFT; if (chg_type == MAX77693_CHARGER_TYPE_NONE) { *attached = false; Loading @@ -422,10 +424,10 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read ADC value to check cable type and decide cable state * according to cable type */ adc = info->status[0] & STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; chg_type = info->status[1] & STATUS2_CHGTYP_MASK; chg_type >>= STATUS2_CHGTYP_SHIFT; adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; adc >>= MAX77693_STATUS1_ADC_SHIFT; chg_type = info->status[1] & MAX77693_STATUS2_CHGTYP_MASK; chg_type >>= MAX77693_STATUS2_CHGTYP_SHIFT; if (adc == MAX77693_MUIC_ADC_OPEN && chg_type == MAX77693_CHARGER_TYPE_NONE) Loading @@ -437,8 +439,8 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info, * Read vbvolt field, if vbvolt is 1, * this cable is used for charging. */ vbvolt = info->status[1] & STATUS2_VBVOLT_MASK; vbvolt >>= STATUS2_VBVOLT_SHIFT; vbvolt = info->status[1] & MAX77693_STATUS2_VBVOLT_MASK; vbvolt >>= MAX77693_STATUS2_VBVOLT_SHIFT; cable_type = vbvolt; break; Loading Loading @@ -520,7 +522,8 @@ static int max77693_muic_dock_handler(struct max77693_muic_info *info, } /* Dock-Car/Desk/Audio, PATH:AUDIO */ ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, attached); ret = max77693_muic_set_path(info, MAX77693_CONTROL1_SW_AUDIO, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, dock_id, attached); Loading Loading @@ -585,14 +588,16 @@ static int max77693_muic_adc_ground_handler(struct max77693_muic_info *info) case MAX77693_MUIC_GND_USB_HOST: case MAX77693_MUIC_GND_USB_HOST_VB: /* USB_HOST, PATH: AP_USB */ ret = max77693_muic_set_path(info, CONTROL1_SW_USB, attached); ret = max77693_muic_set_path(info, MAX77693_CONTROL1_SW_USB, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, attached); break; case MAX77693_MUIC_GND_AV_CABLE_LOAD: /* Audio Video Cable with load, PATH:AUDIO */ ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, attached); ret = max77693_muic_set_path(info, MAX77693_CONTROL1_SW_AUDIO, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_USB, attached); Loading @@ -615,7 +620,7 @@ static int max77693_muic_jig_handler(struct max77693_muic_info *info, int cable_type, bool attached) { int ret = 0; u8 path = CONTROL1_SW_OPEN; u8 path = MAX77693_CONTROL1_SW_OPEN; dev_info(info->dev, "external connector is %s (adc:0x%02x)\n", Loading @@ -625,12 +630,12 @@ static int max77693_muic_jig_handler(struct max77693_muic_info *info, case MAX77693_MUIC_ADC_FACTORY_MODE_USB_OFF: /* ADC_JIG_USB_OFF */ case MAX77693_MUIC_ADC_FACTORY_MODE_USB_ON: /* ADC_JIG_USB_ON */ /* PATH:AP_USB */ path = CONTROL1_SW_USB; path = MAX77693_CONTROL1_SW_USB; break; case MAX77693_MUIC_ADC_FACTORY_MODE_UART_OFF: /* ADC_JIG_UART_OFF */ case MAX77693_MUIC_ADC_FACTORY_MODE_UART_ON: /* ADC_JIG_UART_ON */ /* PATH:AP_UART */ path = CONTROL1_SW_UART; path = MAX77693_CONTROL1_SW_UART; break; default: dev_err(info->dev, "failed to detect %s jig cable\n", Loading Loading @@ -1077,7 +1082,7 @@ static int max77693_muic_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "allocate register map\n"); } else { info->max77693->regmap_muic = devm_regmap_init_i2c( info->max77693->muic, info->max77693->i2c_muic, &max77693_muic_regmap_config); if (IS_ERR(info->max77693->regmap_muic)) { ret = PTR_ERR(info->max77693->regmap_muic); Loading Loading @@ -1164,28 +1169,9 @@ static int max77693_muic_probe(struct platform_device *pdev) } for (i = 0; i < num_init_data; i++) { enum max77693_irq_source irq_src = MAX77693_IRQ_GROUP_NR; regmap_write(info->max77693->regmap_muic, init_data[i].addr, init_data[i].data); switch (init_data[i].addr) { case MAX77693_MUIC_REG_INTMASK1: irq_src = MUIC_INT1; break; case MAX77693_MUIC_REG_INTMASK2: irq_src = MUIC_INT2; break; case MAX77693_MUIC_REG_INTMASK3: irq_src = MUIC_INT3; break; } if (irq_src < MAX77693_IRQ_GROUP_NR) info->max77693->irq_masks_cur[irq_src] = init_data[i].data; } if (pdata && pdata->muic_data) { Loading @@ -1199,12 +1185,12 @@ static int max77693_muic_probe(struct platform_device *pdev) if (muic_pdata->path_uart) info->path_uart = muic_pdata->path_uart; else info->path_uart = CONTROL1_SW_UART; info->path_uart = MAX77693_CONTROL1_SW_UART; if (muic_pdata->path_usb) info->path_usb = muic_pdata->path_usb; else info->path_usb = CONTROL1_SW_USB; info->path_usb = MAX77693_CONTROL1_SW_USB; /* * Default delay time for detecting cable state Loading @@ -1216,8 +1202,8 @@ static int max77693_muic_probe(struct platform_device *pdev) else delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT); } else { info->path_usb = CONTROL1_SW_USB; info->path_uart = CONTROL1_SW_UART; info->path_usb = MAX77693_CONTROL1_SW_USB; info->path_uart = MAX77693_CONTROL1_SW_UART; delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT); } Loading
drivers/extcon/extcon-max77843.c +41 −25 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/i2c.h> #include <linux/interrupt.h> #include <linux/kernel.h> #include <linux/mfd/max77693-common.h> #include <linux/mfd/max77843-private.h> #include <linux/module.h> #include <linux/platform_device.h> Loading @@ -32,7 +33,7 @@ enum max77843_muic_status { struct max77843_muic_info { struct device *dev; struct max77843 *max77843; struct max77693_dev *max77843; struct extcon_dev *edev; struct mutex mutex; Loading Loading @@ -198,18 +199,18 @@ static const struct regmap_irq_chip max77843_muic_irq_chip = { static int max77843_muic_set_path(struct max77843_muic_info *info, u8 val, bool attached) { struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int ret = 0; unsigned int ctrl1, ctrl2; if (attached) ctrl1 = val; else ctrl1 = CONTROL1_SW_OPEN; ctrl1 = MAX77843_MUIC_CONTROL1_SW_OPEN; ret = regmap_update_bits(max77843->regmap_muic, MAX77843_MUIC_REG_CONTROL1, CONTROL1_COM_SW, ctrl1); MAX77843_MUIC_CONTROL1_COM_SW, ctrl1); if (ret < 0) { dev_err(info->dev, "Cannot switch MUIC port\n"); return ret; Loading Loading @@ -243,7 +244,7 @@ static int max77843_muic_get_cable_type(struct max77843_muic_info *info, adc = info->status[MAX77843_MUIC_STATUS1] & MAX77843_MUIC_STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; adc >>= MAX77843_MUIC_STATUS1_ADC_SHIFT; switch (group) { case MAX77843_CABLE_GROUP_ADC: Loading Loading @@ -309,7 +310,7 @@ static int max77843_muic_get_cable_type(struct max77843_muic_info *info, /* Get VBVolt register bit */ gnd_type |= (info->status[MAX77843_MUIC_STATUS2] & MAX77843_MUIC_STATUS2_VBVOLT_MASK); gnd_type >>= STATUS2_VBVOLT_SHIFT; gnd_type >>= MAX77843_MUIC_STATUS2_VBVOLT_SHIFT; /* Offset of GND cable */ gnd_type |= MAX77843_MUIC_GND_USB_HOST; Loading Loading @@ -338,7 +339,9 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) switch (gnd_cable_type) { case MAX77843_MUIC_GND_USB_HOST: case MAX77843_MUIC_GND_USB_HOST_VB: ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_USB, attached); if (ret < 0) return ret; Loading @@ -346,7 +349,9 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) break; case MAX77843_MUIC_GND_MHL_VB: case MAX77843_MUIC_GND_MHL: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -365,7 +370,7 @@ static int max77843_muic_jig_handler(struct max77843_muic_info *info, int cable_type, bool attached) { int ret; u8 path = CONTROL1_SW_OPEN; u8 path = MAX77843_MUIC_CONTROL1_SW_OPEN; dev_dbg(info->dev, "external connector is %s (adc:0x%02x)\n", attached ? "attached" : "detached", cable_type); Loading @@ -373,10 +378,10 @@ static int max77843_muic_jig_handler(struct max77843_muic_info *info, switch (cable_type) { case MAX77843_MUIC_ADC_FACTORY_MODE_USB_OFF: case MAX77843_MUIC_ADC_FACTORY_MODE_USB_ON: path = CONTROL1_SW_USB; path = MAX77843_MUIC_CONTROL1_SW_USB; break; case MAX77843_MUIC_ADC_FACTORY_MODE_UART_OFF: path = CONTROL1_SW_UART; path = MAX77843_MUIC_CONTROL1_SW_UART; break; default: return -EINVAL; Loading Loading @@ -474,14 +479,18 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) switch (chg_type) { case MAX77843_MUIC_CHG_USB: ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_USB, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_USB, attached); break; case MAX77843_MUIC_CHG_DOWNSTREAM: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -489,14 +498,18 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) attached); break; case MAX77843_MUIC_CHG_DEDICATED: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; extcon_set_cable_state_(info->edev, EXTCON_TA, attached); break; case MAX77843_MUIC_CHG_SPECIAL_500MA: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -504,7 +517,9 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) attached); break; case MAX77843_MUIC_CHG_SPECIAL_1A: ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); if (ret < 0) return ret; Loading @@ -528,7 +543,8 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) "failed to detect %s accessory (chg_type:0x%x)\n", attached ? "attached" : "detached", chg_type); max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, attached); return -EINVAL; } Loading @@ -539,7 +555,7 @@ static void max77843_muic_irq_work(struct work_struct *work) { struct max77843_muic_info *info = container_of(work, struct max77843_muic_info, irq_work); struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int ret = 0; mutex_lock(&info->mutex); Loading Loading @@ -615,7 +631,7 @@ static void max77843_muic_detect_cable_wq(struct work_struct *work) { struct max77843_muic_info *info = container_of(to_delayed_work(work), struct max77843_muic_info, wq_detcable); struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int chg_type, adc, ret; bool attached; Loading Loading @@ -656,7 +672,7 @@ static void max77843_muic_detect_cable_wq(struct work_struct *work) static int max77843_muic_set_debounce_time(struct max77843_muic_info *info, enum max77843_muic_adc_debounce_time time) { struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; int ret; switch (time) { Loading @@ -667,7 +683,7 @@ static int max77843_muic_set_debounce_time(struct max77843_muic_info *info, ret = regmap_update_bits(max77843->regmap_muic, MAX77843_MUIC_REG_CONTROL4, MAX77843_MUIC_CONTROL4_ADCDBSET_MASK, time << CONTROL4_ADCDBSET_SHIFT); time << MAX77843_MUIC_CONTROL4_ADCDBSET_SHIFT); if (ret < 0) { dev_err(info->dev, "Cannot write MUIC regmap\n"); return ret; Loading @@ -681,7 +697,7 @@ static int max77843_muic_set_debounce_time(struct max77843_muic_info *info, return 0; } static int max77843_init_muic_regmap(struct max77843 *max77843) static int max77843_init_muic_regmap(struct max77693_dev *max77843) { int ret; Loading Loading @@ -720,7 +736,7 @@ static int max77843_init_muic_regmap(struct max77843 *max77843) static int max77843_muic_probe(struct platform_device *pdev) { struct max77843 *max77843 = dev_get_drvdata(pdev->dev.parent); struct max77693_dev *max77843 = dev_get_drvdata(pdev->dev.parent); struct max77843_muic_info *info; unsigned int id; int i, ret; Loading Loading @@ -768,7 +784,7 @@ static int max77843_muic_probe(struct platform_device *pdev) max77843_muic_set_debounce_time(info, MAX77843_DEBOUNCE_TIME_25MS); /* Set initial path for UART */ max77843_muic_set_path(info, CONTROL1_SW_UART, true); max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_UART, true); /* Check revision number of MUIC device */ ret = regmap_read(max77843->regmap_muic, MAX77843_MUIC_REG_ID, &id); Loading Loading @@ -821,7 +837,7 @@ static int max77843_muic_probe(struct platform_device *pdev) static int max77843_muic_remove(struct platform_device *pdev) { struct max77843_muic_info *info = platform_get_drvdata(pdev); struct max77843 *max77843 = info->max77843; struct max77693_dev *max77843 = info->max77843; cancel_work_sync(&info->irq_work); regmap_del_irq_chip(max77843->irq, max77843->irq_data_muic); Loading
drivers/input/misc/Kconfig +3 −15 Original line number Diff line number Diff line Loading @@ -167,28 +167,16 @@ config INPUT_M68K_BEEP depends on M68K config INPUT_MAX77693_HAPTIC tristate "MAXIM MAX77693 haptic controller support" depends on MFD_MAX77693 && PWM tristate "MAXIM MAX77693/MAX77843 haptic controller support" depends on (MFD_MAX77693 || MFD_MAX77843) && PWM select INPUT_FF_MEMLESS help This option enables support for the haptic controller on MAXIM MAX77693 chip. MAXIM MAX77693 and MAX77843 chips. To compile this driver as module, choose M here: the module will be called max77693-haptic. config INPUT_MAX77843_HAPTIC tristate "MAXIM MAX77843 haptic controller support" depends on MFD_MAX77843 && REGULATOR select INPUT_FF_MEMLESS help This option enables support for the haptic controller on MAXIM MAX77843 chip. The driver supports ff-memless interface from input framework. To compile this driver as module, choose M here: the module will be called max77843-haptic. config INPUT_MAX8925_ONKEY tristate "MAX8925 ONKEY support" depends on MFD_MAX8925 Loading
drivers/input/misc/Makefile +0 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,6 @@ obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o obj-$(CONFIG_INPUT_KXTJ9) += kxtj9.o obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o obj-$(CONFIG_INPUT_MAX77693_HAPTIC) += max77693-haptic.o obj-$(CONFIG_INPUT_MAX77843_HAPTIC) += max77843-haptic.o obj-$(CONFIG_INPUT_MAX8925_ONKEY) += max8925_onkey.o obj-$(CONFIG_INPUT_MAX8997_HAPTIC) += max8997_haptic.o obj-$(CONFIG_INPUT_MC13783_PWRBUTTON) += mc13783-pwrbutton.o Loading