Commit f8d96004 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'extcon-next-for-4.4' of...

Merge tag 'extcon-next-for-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon into char-misc-next

Chanwoo writes:

Update extcon for 4.4

Detailed description for patchset:
1. Update the extcon core:
- Modify the unique identification and name of each external connector
  with the additional prefix to clarify both attribute and meaning of
  external connector as following:
: EXTCON_CHG_* mean the charger connector.
: EXTCON_JACK_* mean the jack connector.
: EXTCON_DISP_* mean the display port connector.

- Keep the standard name of USB charging port by refering to the
  "Battery Charging v1.2 Spec and Adopters Agreement"[1] to use
  the standard name of USB charging port as following:
: EXTCON_CHG_USB_SDP /* Standard Downstream Port */
: EXTCON_CHG_USB_DCP /* Dedicated Charging Port */
: EXTCON_CHG_USB_CDP /* Charging Downstream Port */
: EXTCON_CHG_USB_ACA /* Accessory Charger Adapter */
[1] www.usb.org/developers/docs/devclass_docs/BCv1.2_070312.zip

2. Update the extcon-arizona.c driver:
- Support the WM8998 and WM1814 codec for jack detection.
- Support for the ADC mode microphone detection and the general
  purpose switch for pop suppression.
- Fix bug include fixing the headphone detection accuracy
  at the top end of the range and some corrections around
  the use of the microphone clamps.

3. Update the extcon-gpio.c driver:
- Clean-up the extcon-gpio driver and fix minor issue before
  supporting the Device tree binding of it.

4. Clean-up and fix the minor issue for extcon drivers:
- Export OF module alias information for extcon-rt8973a.c and extcon-sm5502.c.
- Fix wrong type of variable of for extcon-rt8973a.c and extcon-sm5502.c.
- Use resource managed API for extcon-axp288.c.
parents 4970c0cb 11eecf91
This diff is collapsed.
...@@ -102,9 +102,9 @@ enum axp288_extcon_irq { ...@@ -102,9 +102,9 @@ enum axp288_extcon_irq {
}; };
static const unsigned int axp288_extcon_cables[] = { static const unsigned int axp288_extcon_cables[] = {
EXTCON_SLOW_CHARGER, EXTCON_CHG_USB_SDP,
EXTCON_CHARGE_DOWNSTREAM, EXTCON_CHG_USB_CDP,
EXTCON_FAST_CHARGER, EXTCON_CHG_USB_DCP,
EXTCON_NONE, EXTCON_NONE,
}; };
...@@ -192,18 +192,18 @@ static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info) ...@@ -192,18 +192,18 @@ static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info)
dev_dbg(info->dev, "sdp cable is connecetd\n"); dev_dbg(info->dev, "sdp cable is connecetd\n");
notify_otg = true; notify_otg = true;
notify_charger = true; notify_charger = true;
cable = EXTCON_SLOW_CHARGER; cable = EXTCON_CHG_USB_SDP;
break; break;
case DET_STAT_CDP: case DET_STAT_CDP:
dev_dbg(info->dev, "cdp cable is connecetd\n"); dev_dbg(info->dev, "cdp cable is connecetd\n");
notify_otg = true; notify_otg = true;
notify_charger = true; notify_charger = true;
cable = EXTCON_CHARGE_DOWNSTREAM; cable = EXTCON_CHG_USB_CDP;
break; break;
case DET_STAT_DCP: case DET_STAT_DCP:
dev_dbg(info->dev, "dcp cable is connecetd\n"); dev_dbg(info->dev, "dcp cable is connecetd\n");
notify_charger = true; notify_charger = true;
cable = EXTCON_FAST_CHARGER; cable = EXTCON_CHG_USB_DCP;
break; break;
default: default:
dev_warn(info->dev, dev_warn(info->dev,
...@@ -309,7 +309,7 @@ static int axp288_extcon_probe(struct platform_device *pdev) ...@@ -309,7 +309,7 @@ static int axp288_extcon_probe(struct platform_device *pdev)
} }
/* Get otg transceiver phy */ /* Get otg transceiver phy */
info->otg = usb_get_phy(USB_PHY_TYPE_USB2); info->otg = devm_usb_get_phy(&pdev->dev, USB_PHY_TYPE_USB2);
if (IS_ERR(info->otg)) { if (IS_ERR(info->otg)) {
dev_err(&pdev->dev, "failed to get otg transceiver\n"); dev_err(&pdev->dev, "failed to get otg transceiver\n");
return PTR_ERR(info->otg); return PTR_ERR(info->otg);
...@@ -318,11 +318,11 @@ static int axp288_extcon_probe(struct platform_device *pdev) ...@@ -318,11 +318,11 @@ static int axp288_extcon_probe(struct platform_device *pdev)
/* Set up gpio control for USB Mux */ /* Set up gpio control for USB Mux */
if (info->pdata->gpio_mux_cntl) { if (info->pdata->gpio_mux_cntl) {
gpio = desc_to_gpio(info->pdata->gpio_mux_cntl); gpio = desc_to_gpio(info->pdata->gpio_mux_cntl);
ret = gpio_request(gpio, "USB_MUX"); ret = devm_gpio_request(&pdev->dev, gpio, "USB_MUX");
if (ret < 0) { if (ret < 0) {
dev_err(&pdev->dev, dev_err(&pdev->dev,
"failed to request the gpio=%d\n", gpio); "failed to request the gpio=%d\n", gpio);
goto gpio_req_failed; return ret;
} }
gpiod_direction_output(info->pdata->gpio_mux_cntl, gpiod_direction_output(info->pdata->gpio_mux_cntl,
EXTCON_GPIO_MUX_SEL_PMIC); EXTCON_GPIO_MUX_SEL_PMIC);
...@@ -335,7 +335,7 @@ static int axp288_extcon_probe(struct platform_device *pdev) ...@@ -335,7 +335,7 @@ static int axp288_extcon_probe(struct platform_device *pdev)
dev_err(&pdev->dev, dev_err(&pdev->dev,
"failed to get virtual interrupt=%d\n", pirq); "failed to get virtual interrupt=%d\n", pirq);
ret = info->irq[i]; ret = info->irq[i];
goto gpio_req_failed; return ret;
} }
ret = devm_request_threaded_irq(&pdev->dev, info->irq[i], ret = devm_request_threaded_irq(&pdev->dev, info->irq[i],
...@@ -345,7 +345,7 @@ static int axp288_extcon_probe(struct platform_device *pdev) ...@@ -345,7 +345,7 @@ static int axp288_extcon_probe(struct platform_device *pdev)
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to request interrupt=%d\n", dev_err(&pdev->dev, "failed to request interrupt=%d\n",
info->irq[i]); info->irq[i]);
goto gpio_req_failed; return ret;
} }
} }
...@@ -353,23 +353,10 @@ static int axp288_extcon_probe(struct platform_device *pdev) ...@@ -353,23 +353,10 @@ static int axp288_extcon_probe(struct platform_device *pdev)
axp288_extcon_enable_irq(info); axp288_extcon_enable_irq(info);
return 0; return 0;
gpio_req_failed:
usb_put_phy(info->otg);
return ret;
}
static int axp288_extcon_remove(struct platform_device *pdev)
{
struct axp288_extcon_info *info = platform_get_drvdata(pdev);
usb_put_phy(info->otg);
return 0;
} }
static struct platform_driver axp288_extcon_driver = { static struct platform_driver axp288_extcon_driver = {
.probe = axp288_extcon_probe, .probe = axp288_extcon_probe,
.remove = axp288_extcon_remove,
.driver = { .driver = {
.name = "axp288_extcon", .name = "axp288_extcon",
}, },
......
/* /*
* drivers/extcon/extcon_gpio.c * extcon_gpio.c - Single-state GPIO extcon driver based on extcon class
*
* Single-state GPIO extcon driver based on extcon class
* *
* Copyright (C) 2008 Google, Inc. * Copyright (C) 2008 Google, Inc.
* Author: Mike Lockwood <lockwood@android.com> * Author: Mike Lockwood <lockwood@android.com>
...@@ -17,12 +15,12 @@ ...@@ -17,12 +15,12 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* */
*/
#include <linux/extcon.h> #include <linux/extcon.h>
#include <linux/extcon/extcon-gpio.h> #include <linux/extcon/extcon-gpio.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -33,14 +31,12 @@ ...@@ -33,14 +31,12 @@
struct gpio_extcon_data { struct gpio_extcon_data {
struct extcon_dev *edev; struct extcon_dev *edev;
unsigned gpio;
bool gpio_active_low;
const char *state_on;
const char *state_off;
int irq; int irq;
struct delayed_work work; struct delayed_work work;
unsigned long debounce_jiffies; unsigned long debounce_jiffies;
bool check_on_resume;
struct gpio_desc *id_gpiod;
struct gpio_extcon_pdata *pdata;
}; };
static void gpio_extcon_work(struct work_struct *work) static void gpio_extcon_work(struct work_struct *work)
...@@ -50,93 +46,107 @@ static void gpio_extcon_work(struct work_struct *work) ...@@ -50,93 +46,107 @@ static void gpio_extcon_work(struct work_struct *work)
container_of(to_delayed_work(work), struct gpio_extcon_data, container_of(to_delayed_work(work), struct gpio_extcon_data,
work); work);
state = gpio_get_value(data->gpio); state = gpiod_get_value_cansleep(data->id_gpiod);
if (data->gpio_active_low) if (data->pdata->gpio_active_low)
state = !state; state = !state;
extcon_set_state(data->edev, state); extcon_set_state(data->edev, state);
} }
static irqreturn_t gpio_irq_handler(int irq, void *dev_id) static irqreturn_t gpio_irq_handler(int irq, void *dev_id)
{ {
struct gpio_extcon_data *extcon_data = dev_id; struct gpio_extcon_data *data = dev_id;
queue_delayed_work(system_power_efficient_wq, &extcon_data->work, queue_delayed_work(system_power_efficient_wq, &data->work,
extcon_data->debounce_jiffies); data->debounce_jiffies);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int gpio_extcon_init(struct device *dev, struct gpio_extcon_data *data)
{
struct gpio_extcon_pdata *pdata = data->pdata;
int ret;
ret = devm_gpio_request_one(dev, pdata->gpio, GPIOF_DIR_IN,
dev_name(dev));
if (ret < 0)
return ret;
data->id_gpiod = gpio_to_desc(pdata->gpio);
if (!data->id_gpiod)
return -EINVAL;
if (pdata->debounce) {
ret = gpiod_set_debounce(data->id_gpiod,
pdata->debounce * 1000);
if (ret < 0)
data->debounce_jiffies =
msecs_to_jiffies(pdata->debounce);
}
data->irq = gpiod_to_irq(data->id_gpiod);
if (data->irq < 0)
return data->irq;
return 0;
}
static int gpio_extcon_probe(struct platform_device *pdev) static int gpio_extcon_probe(struct platform_device *pdev)
{ {
struct gpio_extcon_platform_data *pdata = dev_get_platdata(&pdev->dev); struct gpio_extcon_pdata *pdata = dev_get_platdata(&pdev->dev);
struct gpio_extcon_data *extcon_data; struct gpio_extcon_data *data;
int ret; int ret;
if (!pdata) if (!pdata)
return -EBUSY; return -EBUSY;
if (!pdata->irq_flags) { if (!pdata->irq_flags || pdata->extcon_id > EXTCON_NONE)
dev_err(&pdev->dev, "IRQ flag is not specified.\n");
return -EINVAL; return -EINVAL;
}
extcon_data = devm_kzalloc(&pdev->dev, sizeof(struct gpio_extcon_data), data = devm_kzalloc(&pdev->dev, sizeof(struct gpio_extcon_data),
GFP_KERNEL); GFP_KERNEL);
if (!extcon_data) if (!data)
return -ENOMEM; return -ENOMEM;
data->pdata = pdata;
extcon_data->edev = devm_extcon_dev_allocate(&pdev->dev, NULL); /* Initialize the gpio */
if (IS_ERR(extcon_data->edev)) { ret = gpio_extcon_init(&pdev->dev, data);
dev_err(&pdev->dev, "failed to allocate extcon device\n");
return -ENOMEM;
}
extcon_data->gpio = pdata->gpio;
extcon_data->gpio_active_low = pdata->gpio_active_low;
extcon_data->state_on = pdata->state_on;
extcon_data->state_off = pdata->state_off;
extcon_data->check_on_resume = pdata->check_on_resume;
ret = devm_gpio_request_one(&pdev->dev, extcon_data->gpio, GPIOF_DIR_IN,
pdev->name);
if (ret < 0) if (ret < 0)
return ret; return ret;
if (pdata->debounce) { /* Allocate the memory of extcon devie and register extcon device */
ret = gpio_set_debounce(extcon_data->gpio, data->edev = devm_extcon_dev_allocate(&pdev->dev, &pdata->extcon_id);
pdata->debounce * 1000); if (IS_ERR(data->edev)) {
if (ret < 0) dev_err(&pdev->dev, "failed to allocate extcon device\n");
extcon_data->debounce_jiffies = return -ENOMEM;
msecs_to_jiffies(pdata->debounce);
} }
ret = devm_extcon_dev_register(&pdev->dev, extcon_data->edev); ret = devm_extcon_dev_register(&pdev->dev, data->edev);
if (ret < 0) if (ret < 0)
return ret; return ret;
INIT_DELAYED_WORK(&extcon_data->work, gpio_extcon_work); INIT_DELAYED_WORK(&data->work, gpio_extcon_work);
extcon_data->irq = gpio_to_irq(extcon_data->gpio);
if (extcon_data->irq < 0)
return extcon_data->irq;
ret = request_any_context_irq(extcon_data->irq, gpio_irq_handler, /*
pdata->irq_flags, pdev->name, * Request the interrput of gpio to detect whether external connector
extcon_data); * is attached or detached.
*/
ret = devm_request_any_context_irq(&pdev->dev, data->irq,
gpio_irq_handler, pdata->irq_flags,
pdev->name, data);
if (ret < 0) if (ret < 0)
return ret; return ret;
platform_set_drvdata(pdev, extcon_data); platform_set_drvdata(pdev, data);
/* Perform initial detection */ /* Perform initial detection */
gpio_extcon_work(&extcon_data->work.work); gpio_extcon_work(&data->work.work);
return 0; return 0;
} }
static int gpio_extcon_remove(struct platform_device *pdev) static int gpio_extcon_remove(struct platform_device *pdev)
{ {
struct gpio_extcon_data *extcon_data = platform_get_drvdata(pdev); struct gpio_extcon_data *data = platform_get_drvdata(pdev);
cancel_delayed_work_sync(&extcon_data->work); cancel_delayed_work_sync(&data->work);
free_irq(extcon_data->irq, extcon_data);
return 0; return 0;
} }
...@@ -144,12 +154,12 @@ static int gpio_extcon_remove(struct platform_device *pdev) ...@@ -144,12 +154,12 @@ static int gpio_extcon_remove(struct platform_device *pdev)
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
static int gpio_extcon_resume(struct device *dev) static int gpio_extcon_resume(struct device *dev)
{ {
struct gpio_extcon_data *extcon_data; struct gpio_extcon_data *data;
extcon_data = dev_get_drvdata(dev); data = dev_get_drvdata(dev);
if (extcon_data->check_on_resume) if (data->pdata->check_on_resume)
queue_delayed_work(system_power_efficient_wq, queue_delayed_work(system_power_efficient_wq,
&extcon_data->work, extcon_data->debounce_jiffies); &data->work, data->debounce_jiffies);
return 0; return 0;
} }
......
...@@ -150,10 +150,10 @@ enum max14577_muic_acc_type { ...@@ -150,10 +150,10 @@ enum max14577_muic_acc_type {
static const unsigned int max14577_extcon_cable[] = { static const unsigned int max14577_extcon_cable[] = {
EXTCON_USB, EXTCON_USB,
EXTCON_TA, EXTCON_CHG_USB_DCP,
EXTCON_FAST_CHARGER, EXTCON_CHG_USB_FAST,
EXTCON_SLOW_CHARGER, EXTCON_CHG_USB_SLOW,
EXTCON_CHARGE_DOWNSTREAM, EXTCON_CHG_USB_CDP,
EXTCON_JIG, EXTCON_JIG,
EXTCON_NONE, EXTCON_NONE,
}; };
...@@ -456,18 +456,19 @@ static int max14577_muic_chg_handler(struct max14577_muic_info *info) ...@@ -456,18 +456,19 @@ static int max14577_muic_chg_handler(struct max14577_muic_info *info)
extcon_set_cable_state_(info->edev, EXTCON_USB, attached); extcon_set_cable_state_(info->edev, EXTCON_USB, attached);
break; break;
case MAX14577_CHARGER_TYPE_DEDICATED_CHG: case MAX14577_CHARGER_TYPE_DEDICATED_CHG:
extcon_set_cable_state_(info->edev, EXTCON_TA, attached); extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_DCP,
attached);
break; break;
case MAX14577_CHARGER_TYPE_DOWNSTREAM_PORT: case MAX14577_CHARGER_TYPE_DOWNSTREAM_PORT:
extcon_set_cable_state_(info->edev, EXTCON_CHARGE_DOWNSTREAM, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_CDP,
attached); attached);
break; break;
case MAX14577_CHARGER_TYPE_SPECIAL_500MA: case MAX14577_CHARGER_TYPE_SPECIAL_500MA:
extcon_set_cable_state_(info->edev, EXTCON_SLOW_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_SLOW,
attached); attached);
break; break;
case MAX14577_CHARGER_TYPE_SPECIAL_1A: case MAX14577_CHARGER_TYPE_SPECIAL_1A:
extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_FAST,
attached); attached);
break; break;
case MAX14577_CHARGER_TYPE_NONE: case MAX14577_CHARGER_TYPE_NONE:
......
...@@ -204,11 +204,11 @@ enum max77693_muic_acc_type { ...@@ -204,11 +204,11 @@ enum max77693_muic_acc_type {
static const unsigned int max77693_extcon_cable[] = { static const unsigned int max77693_extcon_cable[] = {
EXTCON_USB, EXTCON_USB,
EXTCON_USB_HOST, EXTCON_USB_HOST,
EXTCON_TA, EXTCON_CHG_USB_DCP,
EXTCON_FAST_CHARGER, EXTCON_CHG_USB_FAST,
EXTCON_SLOW_CHARGER, EXTCON_CHG_USB_SLOW,
EXTCON_CHARGE_DOWNSTREAM, EXTCON_CHG_USB_CDP,
EXTCON_MHL, EXTCON_DISP_MHL,
EXTCON_JIG, EXTCON_JIG,
EXTCON_DOCK, EXTCON_DOCK,
EXTCON_NONE, EXTCON_NONE,
...@@ -505,7 +505,7 @@ static int max77693_muic_dock_handler(struct max77693_muic_info *info, ...@@ -505,7 +505,7 @@ static int max77693_muic_dock_handler(struct max77693_muic_info *info,
return ret; return ret;
extcon_set_cable_state_(info->edev, EXTCON_DOCK, attached); extcon_set_cable_state_(info->edev, EXTCON_DOCK, attached);
extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); extcon_set_cable_state_(info->edev, EXTCON_DISP_MHL, attached);
goto out; goto out;
case MAX77693_MUIC_ADC_AUDIO_MODE_REMOTE: /* Dock-Desk */ case MAX77693_MUIC_ADC_AUDIO_MODE_REMOTE: /* Dock-Desk */
dock_id = EXTCON_DOCK; dock_id = EXTCON_DOCK;
...@@ -605,7 +605,7 @@ static int max77693_muic_adc_ground_handler(struct max77693_muic_info *info) ...@@ -605,7 +605,7 @@ static int max77693_muic_adc_ground_handler(struct max77693_muic_info *info)
case MAX77693_MUIC_GND_MHL: case MAX77693_MUIC_GND_MHL:
case MAX77693_MUIC_GND_MHL_VB: case MAX77693_MUIC_GND_MHL_VB:
/* MHL or MHL with USB/TA cable */ /* MHL or MHL with USB/TA cable */
extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); extcon_set_cable_state_(info->edev, EXTCON_DISP_MHL, attached);
break; break;
default: default:
dev_err(info->dev, "failed to detect %s cable of gnd type\n", dev_err(info->dev, "failed to detect %s cable of gnd type\n",
...@@ -801,10 +801,11 @@ static int max77693_muic_chg_handler(struct max77693_muic_info *info) ...@@ -801,10 +801,11 @@ static int max77693_muic_chg_handler(struct max77693_muic_info *info)
* - Support charging through micro-usb port without * - Support charging through micro-usb port without
* data connection * data connection
*/ */
extcon_set_cable_state_(info->edev, EXTCON_TA, attached); extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_DCP,
attached);
if (!cable_attached) if (!cable_attached)
extcon_set_cable_state_(info->edev, EXTCON_MHL, extcon_set_cable_state_(info->edev,
cable_attached); EXTCON_DISP_MHL, cable_attached);
break; break;
} }
...@@ -862,7 +863,7 @@ static int max77693_muic_chg_handler(struct max77693_muic_info *info) ...@@ -862,7 +863,7 @@ static int max77693_muic_chg_handler(struct max77693_muic_info *info)
extcon_set_cable_state_(info->edev, EXTCON_DOCK, extcon_set_cable_state_(info->edev, EXTCON_DOCK,
attached); attached);
extcon_set_cable_state_(info->edev, EXTCON_MHL, extcon_set_cable_state_(info->edev, EXTCON_DISP_MHL,
attached); attached);
break; break;
} }
...@@ -901,20 +902,21 @@ static int max77693_muic_chg_handler(struct max77693_muic_info *info) ...@@ -901,20 +902,21 @@ static int max77693_muic_chg_handler(struct max77693_muic_info *info)
break; break;
case MAX77693_CHARGER_TYPE_DEDICATED_CHG: case MAX77693_CHARGER_TYPE_DEDICATED_CHG:
/* Only TA cable */ /* Only TA cable */
extcon_set_cable_state_(info->edev, EXTCON_TA, attached); extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_DCP,
attached);
break; break;
} }
break; break;
case MAX77693_CHARGER_TYPE_DOWNSTREAM_PORT: case MAX77693_CHARGER_TYPE_DOWNSTREAM_PORT:
extcon_set_cable_state_(info->edev, EXTCON_CHARGE_DOWNSTREAM, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_CDP,
attached); attached);
break; break;
case MAX77693_CHARGER_TYPE_APPLE_500MA: case MAX77693_CHARGER_TYPE_APPLE_500MA:
extcon_set_cable_state_(info->edev, EXTCON_SLOW_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_SLOW,
attached); attached);
break; break;
case MAX77693_CHARGER_TYPE_APPLE_1A_2A: case MAX77693_CHARGER_TYPE_APPLE_1A_2A:
extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_FAST,
attached); attached);
break; break;
case MAX77693_CHARGER_TYPE_DEAD_BATTERY: case MAX77693_CHARGER_TYPE_DEAD_BATTERY:
......
...@@ -122,11 +122,11 @@ enum max77843_muic_charger_type { ...@@ -122,11 +122,11 @@ enum max77843_muic_charger_type {
static const unsigned int max77843_extcon_cable[] = { static const unsigned int max77843_extcon_cable[] = {
EXTCON_USB, EXTCON_USB,
EXTCON_USB_HOST, EXTCON_USB_HOST,
EXTCON_TA, EXTCON_CHG_USB_DCP,
EXTCON_CHARGE_DOWNSTREAM, EXTCON_CHG_USB_CDP,
EXTCON_FAST_CHARGER, EXTCON_CHG_USB_FAST,
EXTCON_SLOW_CHARGER, EXTCON_CHG_USB_SLOW,
EXTCON_MHL, EXTCON_DISP_MHL,
EXTCON_JIG, EXTCON_JIG,
EXTCON_NONE, EXTCON_NONE,
}; };
...@@ -355,7 +355,7 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) ...@@ -355,7 +355,7 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info)
if (ret < 0) if (ret < 0)
return ret; return ret;
extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); extcon_set_cable_state_(info->edev, EXTCON_DISP_MHL, attached);
break; break;
default: default:
dev_err(info->dev, "failed to detect %s accessory(gnd:0x%x)\n", dev_err(info->dev, "failed to detect %s accessory(gnd:0x%x)\n",
...@@ -494,7 +494,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) ...@@ -494,7 +494,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info)
if (ret < 0) if (ret < 0)
return ret; return ret;
extcon_set_cable_state_(info->edev, EXTCON_CHARGE_DOWNSTREAM, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_CDP,
attached); attached);
break; break;
case MAX77843_MUIC_CHG_DEDICATED: case MAX77843_MUIC_CHG_DEDICATED:
...@@ -504,7 +504,8 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) ...@@ -504,7 +504,8 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info)
if (ret < 0) if (ret < 0)
return ret; return ret;
extcon_set_cable_state_(info->edev, EXTCON_TA, attached); extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_DCP,
attached);
break; break;
case MAX77843_MUIC_CHG_SPECIAL_500MA: case MAX77843_MUIC_CHG_SPECIAL_500MA:
ret = max77843_muic_set_path(info, ret = max77843_muic_set_path(info,
...@@ -513,7 +514,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) ...@@ -513,7 +514,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info)
if (ret < 0) if (ret < 0)
return ret; return ret;
extcon_set_cable_state_(info->edev, EXTCON_SLOW_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_SLOW,
attached); attached);
break; break;
case MAX77843_MUIC_CHG_SPECIAL_1A: case MAX77843_MUIC_CHG_SPECIAL_1A:
...@@ -523,7 +524,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) ...@@ -523,7 +524,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info)
if (ret < 0) if (ret < 0)
return ret; return ret;
extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_FAST,
attached); attached);
break; break;
case MAX77843_MUIC_CHG_GND: case MAX77843_MUIC_CHG_GND:
...@@ -532,9 +533,11 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) ...@@ -532,9 +533,11 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info)
/* Charger cable on MHL accessory is attach or detach */ /* Charger cable on MHL accessory is attach or detach */
if (gnd_type == MAX77843_MUIC_GND_MHL_VB) if (gnd_type == MAX77843_MUIC_GND_MHL_VB)
extcon_set_cable_state_(info->edev, EXTCON_TA, true); extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_DCP,
true);
else if (gnd_type == MAX77843_MUIC_GND_MHL) else if (gnd_type == MAX77843_MUIC_GND_MHL)
extcon_set_cable_state_(info->edev, EXTCON_TA, false); extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_DCP,
false);
break; break;
case MAX77843_MUIC_CHG_NONE: case MAX77843_MUIC_CHG_NONE:
break; break;
......
...@@ -148,11 +148,11 @@ struct max8997_muic_info { ...@@ -148,11 +148,11 @@ struct max8997_muic_info {
static const unsigned int max8997_extcon_cable[] = { static const unsigned int max8997_extcon_cable[] = {
EXTCON_USB, EXTCON_USB,
EXTCON_USB_HOST, EXTCON_USB_HOST,
EXTCON_TA, EXTCON_CHG_USB_DCP,
EXTCON_FAST_CHARGER, EXTCON_CHG_USB_FAST,
EXTCON_SLOW_CHARGER, EXTCON_CHG_USB_SLOW,
EXTCON_CHARGE_DOWNSTREAM, EXTCON_CHG_USB_CDP,
EXTCON_MHL, EXTCON_DISP_MHL,
EXTCON_DOCK, EXTCON_DOCK,
EXTCON_JIG, EXTCON_JIG,
EXTCON_NONE, EXTCON_NONE,
...@@ -403,7 +403,7 @@ static int max8997_muic_adc_handler(struct max8997_muic_info *info) ...@@ -403,7 +403,7 @@ static int max8997_muic_adc_handler(struct max8997_muic_info *info)
return ret; return ret;
break; break;
case MAX8997_MUIC_ADC_MHL: case MAX8997_MUIC_ADC_MHL:
extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); extcon_set_cable_state_(info->edev, EXTCON_DISP_MHL, attached);
break; break;
case MAX8997_MUIC_ADC_FACTORY_MODE_USB_OFF: case MAX8997_MUIC_ADC_FACTORY_MODE_USB_OFF:
case MAX8997_MUIC_ADC_FACTORY_MODE_USB_ON: case MAX8997_MUIC_ADC_FACTORY_MODE_USB_ON:
...@@ -486,18 +486,19 @@ static int max8997_muic_chg_handler(struct max8997_muic_info *info) ...@@ -486,18 +486,19 @@ static int max8997_muic_chg_handler(struct max8997_muic_info *info)
} }
break; break;
case MAX8997_CHARGER_TYPE_DOWNSTREAM_PORT: case MAX8997_CHARGER_TYPE_DOWNSTREAM_PORT:
extcon_set_cable_state_(info->edev, EXTCON_CHARGE_DOWNSTREAM, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_CDP,
attached); attached);
break; break;
case MAX8997_CHARGER_TYPE_DEDICATED_CHG: case MAX8997_CHARGER_TYPE_DEDICATED_CHG:
extcon_set_cable_state_(info->edev, EXTCON_TA, attached); extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_DCP,
attached);
break; break;
case MAX8997_CHARGER_TYPE_500MA: case MAX8997_CHARGER_TYPE_500MA:
extcon_set_cable_state_(info->edev, EXTCON_SLOW_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_SLOW,
attached); attached);
break; break;
case MAX8997_CHARGER_TYPE_1A: case MAX8997_CHARGER_TYPE_1A:
extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, extcon_set_cable_state_(info->edev, EXTCON_CHG_USB_FAST,
attached); attached);
break; break;
default: default:
......
...@@ -93,7 +93,7 @@ static struct reg_data rt8973a_reg_data[] = { ...@@ -93,7 +93,7 @@ static struct reg_data rt8973a_reg_data[] = {
static const unsigned int rt8973a_extcon_cable[] = { static const unsigned int rt8973a_extcon_cable[] = {
EXTCON_USB, EXTCON_USB,
EXTCON_USB_HOST, EXTCON_USB_HOST,
EXTCON_TA, EXTCON_CHG_USB_DCP,
EXTCON_JIG, EXTCON_JIG,
EXTCON_NONE, EXTCON_NONE,
}; };
...@@ -333,7 +333,7 @@ static int rt8973a_muic_cable_handler(struct rt8973a_muic_info *info, ...@@ -333,7 +333,7 @@ static int rt8973a_muic_cable_handler(struct rt8973a_muic_info *info,
con_sw = DM_DP_SWITCH_USB; con_sw = DM_DP_SWITCH_USB;
break; break;
case RT8973A_MUIC_ADC_TA: case RT8973A_MUIC_ADC_TA:
id = EXTCON_TA; id = EXTCON_CHG_USB_DCP;
con_sw = DM_DP_SWITCH_OPEN; con_sw = DM_DP_SWITCH_OPEN;
break; break;
case RT8973A_MUIC_ADC_FACTORY_MODE_BOOT_OFF_USB: case RT8973A_MUIC_ADC_FACTORY_MODE_BOOT_OFF_USB:
...@@ -594,7 +594,7 @@ static int rt8973a_muic_i2c_probe(struct i2c_client *i2c, ...@@ -594,7 +594,7 @@ static int rt8973a_muic_i2c_probe(struct i2c_client *i2c,
for (i = 0; i < info->num_muic_irqs; i++) { for (i = 0; i < info->num_muic_irqs; i++) {
struct muic_irq *muic_irq = &info->muic_irqs[i]; struct muic_irq *muic_irq = &info->muic_irqs[i];
unsigned int virq = 0; int virq = 0;
virq = regmap_irq_get_virq(info->irq_data, muic_irq->irq); virq = regmap_irq_get_virq(info->irq_data, muic_irq->irq);
if (virq <= 0) if (virq <= 0)
...@@ -658,6 +658,7 @@ static const struct of_device_id rt8973a_dt_match[] = { ...@@ -658,6 +658,7 @@ static const struct of_device_id rt8973a_dt_match[] = {
{ .compatible = "richtek,rt8973a-muic" }, { .compatible = "richtek,rt8973a-muic" },
{ }, { },
}; };
MODULE_DEVICE_TABLE(of, rt8973a_dt_match);
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
static int rt8973a_muic_suspend(struct device *dev) static int rt8973a_muic_suspend(struct device *dev)
......
...@@ -95,7 +95,7 @@ static struct reg_data sm5502_reg_data[] = { ...@@ -95,7 +95,7 @@ static struct reg_data sm5502_reg_data[] = {
static const unsigned int sm5502_extcon_cable[] = { static const unsigned int sm5502_extcon_cable[] = {
EXTCON_USB, EXTCON_USB,
EXTCON_USB_HOST, EXTCON_USB_HOST,
EXTCON_TA, EXTCON_CHG_USB_DCP,
EXTCON_NONE, EXTCON_NONE,
}; };
...@@ -389,7 +389,7 @@ static int sm5502_muic_cable_handler(struct sm5502_muic_info *info, ...@@ -389,7 +389,7 @@ static int sm5502_muic_cable_handler(struct sm5502_muic_info *info,
vbus_sw = VBUSIN_SWITCH_VBUSOUT_WITH_USB; vbus_sw = VBUSIN_SWITCH_VBUSOUT_WITH_USB;
break; break;
case SM5502_MUIC_ADC_OPEN_TA: case SM5502_MUIC_ADC_OPEN_TA:
id = EXTCON_TA; id = EXTCON_CHG_USB_DCP;
con_sw = DM_DP_SWITCH_OPEN; con_sw = DM_DP_SWITCH_OPEN;
vbus_sw = VBUSIN_SWITCH_VBUSOUT; vbus_sw = VBUSIN_SWITCH_VBUSOUT;
break; break;
...@@ -586,7 +586,7 @@ static int sm5022_muic_i2c_probe(struct i2c_client *i2c, ...@@ -586,7 +586,7 @@ static int sm5022_muic_i2c_probe(struct i2c_client *i2c,
for (i = 0; i < info->num_muic_irqs; i++) { for (i = 0; i < info->num_muic_irqs; i++) {
struct muic_irq *muic_irq = &info->muic_irqs[i]; struct muic_irq *muic_irq = &info->muic_irqs[i];
unsigned int virq = 0; int virq = 0;
virq = regmap_irq_get_virq(info->irq_data, muic_irq->irq); virq = regmap_irq_get_virq(info->irq_data, muic_irq->irq);
if (virq <= 0) if (virq <= 0)
...@@ -650,6 +650,7 @@ static const struct of_device_id sm5502_dt_match[] = { ...@@ -650,6 +650,7 @@ static const struct of_device_id sm5502_dt_match[] = {
{ .compatible = "siliconmitus,sm5502-muic" }, { .compatible = "siliconmitus,sm5502-muic" },
{ }, { },
}; };
MODULE_DEVICE_TABLE(of, sm5502_dt_match);
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
static int sm5502_muic_suspend(struct device *dev) static int sm5502_muic_suspend(struct device *dev)
......
...@@ -39,37 +39,40 @@ ...@@ -39,37 +39,40 @@
#define CABLE_NAME_MAX 30 #define CABLE_NAME_MAX 30
static const char *extcon_name[] = { static const char *extcon_name[] = {
[EXTCON_NONE] = "NONE", [EXTCON_NONE] = "NONE",
/* USB external connector */ /* USB external connector */
[EXTCON_USB] = "USB", [EXTCON_USB] = "USB",
[EXTCON_USB_HOST] = "USB-HOST", [EXTCON_USB_HOST] = "USB-HOST",
/* Charger external connector */ /* Charging external connector */
[EXTCON_TA] = "TA", [EXTCON_CHG_USB_SDP] = "SDP",
[EXTCON_FAST_CHARGER] = "FAST-CHARGER", [EXTCON_CHG_USB_DCP] = "DCP",
[EXTCON_SLOW_CHARGER] = "SLOW-CHARGER", [EXTCON_CHG_USB_CDP] = "CDP",
[EXTCON_CHARGE_DOWNSTREAM] = "CHARGE-DOWNSTREAM", [EXTCON_CHG_USB_ACA] = "ACA",
[EXTCON_CHG_USB_FAST] = "FAST-CHARGER",
/* Audio/Video external connector */ [EXTCON_CHG_USB_SLOW] = "SLOW-CHARGER",
[EXTCON_LINE_IN] = "LINE-IN",
[EXTCON_LINE_OUT] = "LINE-OUT", /* Jack external connector */
[EXTCON_MICROPHONE] = "MICROPHONE", [EXTCON_JACK_MICROPHONE] = "MICROPHONE",
[EXTCON_HEADPHONE] = "HEADPHONE", [EXTCON_JACK_HEADPHONE] = "HEADPHONE",
[EXTCON_JACK_LINE_IN] = "LINE-IN",
[EXTCON_HDMI] = "HDMI", [EXTCON_JACK_LINE_OUT] = "LINE-OUT",
[EXTCON_MHL] = "MHL", [EXTCON_JACK_VIDEO_IN] = "VIDEO-IN",
[EXTCON_DVI] = "DVI", [EXTCON_JACK_VIDEO_OUT] = "VIDEO-OUT",
[EXTCON_VGA] = "VGA", [EXTCON_JACK_SPDIF_IN] = "SPDIF-IN",
[EXTCON_SPDIF_IN] = "SPDIF-IN", [EXTCON_JACK_SPDIF_OUT] = "SPDIF-OUT",
[EXTCON_SPDIF_OUT] = "SPDIF-OUT",
[EXTCON_VIDEO_IN] = "VIDEO-IN", /* Display external connector */
[EXTCON_VIDEO_OUT] = "VIDEO-OUT", [EXTCON_DISP_HDMI] = "HDMI",
[EXTCON_DISP_MHL] = "MHL",
/* Etc external connector */ [EXTCON_DISP_DVI] = "DVI",
[EXTCON_DOCK] = "DOCK", [EXTCON_DISP_VGA] = "VGA",
[EXTCON_JIG] = "JIG",
[EXTCON_MECHANICAL] = "MECHANICAL", /* Miscellaneous external connector */
[EXTCON_DOCK] = "DOCK",
[EXTCON_JIG] = "JIG",
[EXTCON_MECHANICAL] = "MECHANICAL",
NULL, NULL,
}; };
......
...@@ -1481,6 +1481,7 @@ static const struct reg_default wm5110_reg_default[] = { ...@@ -1481,6 +1481,7 @@ static const struct reg_default wm5110_reg_default[] = {
{ 0x00000C04, 0xA101 }, /* R3076 - GPIO5 CTRL */ { 0x00000C04, 0xA101 }, /* R3076 - GPIO5 CTRL */
{ 0x00000C0F, 0x0400 }, /* R3087 - IRQ CTRL 1 */ { 0x00000C0F, 0x0400 }, /* R3087 - IRQ CTRL 1 */
{ 0x00000C10, 0x1000 }, /* R3088 - GPIO Debounce Config */ { 0x00000C10, 0x1000 }, /* R3088 - GPIO Debounce Config */
{ 0x00000C18, 0x0000 }, /* R3096 - GP Switch 1 */
{ 0x00000C20, 0x8002 }, /* R3104 - Misc Pad Ctrl 1 */ { 0x00000C20, 0x8002 }, /* R3104 - Misc Pad Ctrl 1 */
{ 0x00000C21, 0x8001 }, /* R3105 - Misc Pad Ctrl 2 */ { 0x00000C21, 0x8001 }, /* R3105 - Misc Pad Ctrl 2 */
{ 0x00000C22, 0x0000 }, /* R3106 - Misc Pad Ctrl 3 */ { 0x00000C22, 0x0000 }, /* R3106 - Misc Pad Ctrl 3 */
...@@ -1811,6 +1812,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg) ...@@ -1811,6 +1812,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
case ARIZONA_MIC_DETECT_1: case ARIZONA_MIC_DETECT_1:
case ARIZONA_MIC_DETECT_2: case ARIZONA_MIC_DETECT_2:
case ARIZONA_MIC_DETECT_3: case ARIZONA_MIC_DETECT_3:
case ARIZONA_MIC_DETECT_4:
case ARIZONA_MIC_DETECT_LEVEL_1: case ARIZONA_MIC_DETECT_LEVEL_1:
case ARIZONA_MIC_DETECT_LEVEL_2: case ARIZONA_MIC_DETECT_LEVEL_2:
case ARIZONA_MIC_DETECT_LEVEL_3: case ARIZONA_MIC_DETECT_LEVEL_3:
...@@ -1910,6 +1912,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg) ...@@ -1910,6 +1912,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
case ARIZONA_HP1_SHORT_CIRCUIT_CTRL: case ARIZONA_HP1_SHORT_CIRCUIT_CTRL:
case ARIZONA_HP2_SHORT_CIRCUIT_CTRL: case ARIZONA_HP2_SHORT_CIRCUIT_CTRL:
case ARIZONA_HP3_SHORT_CIRCUIT_CTRL: case ARIZONA_HP3_SHORT_CIRCUIT_CTRL:
case ARIZONA_HP_TEST_CTRL_1:
case ARIZONA_AIF1_BCLK_CTRL: case ARIZONA_AIF1_BCLK_CTRL:
case ARIZONA_AIF1_TX_PIN_CTRL: case ARIZONA_AIF1_TX_PIN_CTRL:
case ARIZONA_AIF1_RX_PIN_CTRL: case ARIZONA_AIF1_RX_PIN_CTRL:
...@@ -2527,6 +2530,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg) ...@@ -2527,6 +2530,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
case ARIZONA_GPIO5_CTRL: case ARIZONA_GPIO5_CTRL:
case ARIZONA_IRQ_CTRL_1: case ARIZONA_IRQ_CTRL_1:
case ARIZONA_GPIO_DEBOUNCE_CONFIG: case ARIZONA_GPIO_DEBOUNCE_CONFIG:
case ARIZONA_GP_SWITCH_1:
case ARIZONA_MISC_PAD_CTRL_1: case ARIZONA_MISC_PAD_CTRL_1:
case ARIZONA_MISC_PAD_CTRL_2: case ARIZONA_MISC_PAD_CTRL_2:
case ARIZONA_MISC_PAD_CTRL_3: case ARIZONA_MISC_PAD_CTRL_3:
...@@ -2847,12 +2851,14 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg) ...@@ -2847,12 +2851,14 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg)
case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS: case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
case ARIZONA_ASYNC_SAMPLE_RATE_2_STATUS: case ARIZONA_ASYNC_SAMPLE_RATE_2_STATUS:
case ARIZONA_MIC_DETECT_3: case ARIZONA_MIC_DETECT_3:
case ARIZONA_MIC_DETECT_4:
case ARIZONA_HP_CTRL_1L: case ARIZONA_HP_CTRL_1L:
case ARIZONA_HP_CTRL_1R: case ARIZONA_HP_CTRL_1R:
case ARIZONA_HEADPHONE_DETECT_2: case ARIZONA_HEADPHONE_DETECT_2:
case ARIZONA_INPUT_ENABLES_STATUS: case ARIZONA_INPUT_ENABLES_STATUS:
case ARIZONA_OUTPUT_STATUS_1: case ARIZONA_OUTPUT_STATUS_1:
case ARIZONA_RAW_OUTPUT_STATUS_1: case ARIZONA_RAW_OUTPUT_STATUS_1:
case ARIZONA_HP_TEST_CTRL_1:
case ARIZONA_SLIMBUS_RX_PORT_STATUS: case ARIZONA_SLIMBUS_RX_PORT_STATUS:
case ARIZONA_SLIMBUS_TX_PORT_STATUS: case ARIZONA_SLIMBUS_TX_PORT_STATUS:
case ARIZONA_INTERRUPT_STATUS_1: case ARIZONA_INTERRUPT_STATUS_1:
......
...@@ -107,5 +107,7 @@ ...@@ -107,5 +107,7 @@
#define ARIZONA_ACCDET_MODE_MIC 0 #define ARIZONA_ACCDET_MODE_MIC 0
#define ARIZONA_ACCDET_MODE_HPL 1 #define ARIZONA_ACCDET_MODE_HPL 1
#define ARIZONA_ACCDET_MODE_HPR 2 #define ARIZONA_ACCDET_MODE_HPR 2
#define ARIZONA_ACCDET_MODE_HPM 4
#define ARIZONA_ACCDET_MODE_ADC 7
#endif #endif
...@@ -31,32 +31,42 @@ ...@@ -31,32 +31,42 @@
/* /*
* Define the unique id of supported external connectors * Define the unique id of supported external connectors
*/ */
#define EXTCON_NONE 0 #define EXTCON_NONE 0
#define EXTCON_USB 1 /* USB connector */ /* USB external connector */
#define EXTCON_USB_HOST 2 #define EXTCON_USB 1
#define EXTCON_USB_HOST 2
#define EXTCON_TA 3 /* Charger connector */
#define EXTCON_FAST_CHARGER 4 /* Charging external connector */
#define EXTCON_SLOW_CHARGER 5 #define EXTCON_CHG_USB_SDP 5 /* Standard Downstream Port */
#define EXTCON_CHARGE_DOWNSTREAM 6 #define EXTCON_CHG_USB_DCP 6 /* Dedicated Charging Port */
#define EXTCON_CHG_USB_CDP 7 /* Charging Downstream Port */
#define EXTCON_LINE_IN 7 /* Audio/Video connector */ #define EXTCON_CHG_USB_ACA 8 /* Accessory Charger Adapter */
#define EXTCON_LINE_OUT 8 #define EXTCON_CHG_USB_FAST 9
#define EXTCON_MICROPHONE 9 #define EXTCON_CHG_USB_SLOW 10
#define EXTCON_HEADPHONE 10
#define EXTCON_HDMI 11 /* Jack external connector */
#define EXTCON_MHL 12 #define EXTCON_JACK_MICROPHONE 20
#define EXTCON_DVI 13 #define EXTCON_JACK_HEADPHONE 21
#define EXTCON_VGA 14 #define EXTCON_JACK_LINE_IN 22
#define EXTCON_SPDIF_IN 15 #define EXTCON_JACK_LINE_OUT 23
#define EXTCON_SPDIF_OUT 16 #define EXTCON_JACK_VIDEO_IN 24
#define EXTCON_VIDEO_IN 17 #define EXTCON_JACK_VIDEO_OUT 25
#define EXTCON_VIDEO_OUT 18 #define EXTCON_JACK_SPDIF_IN 26 /* Sony Philips Digital InterFace */
#define EXTCON_JACK_SPDIF_OUT 27
#define EXTCON_DOCK 19 /* Misc connector */
#define EXTCON_JIG 20 /* Display external connector */
#define EXTCON_MECHANICAL 21 #define EXTCON_DISP_HDMI 40 /* High-Definition Multimedia Interface */
#define EXTCON_DISP_MHL 41 /* Mobile High-Definition Link */
#define EXTCON_DISP_DVI 42 /* Digital Visual Interface */
#define EXTCON_DISP_VGA 43 /* Video Graphics Array */
/* Miscellaneous external connector */
#define EXTCON_DOCK 60
#define EXTCON_JIG 61
#define EXTCON_MECHANICAL 62
#define EXTCON_NUM 63
struct extcon_cable; struct extcon_cable;
......
/* /*
* External connector (extcon) class generic GPIO driver * Single-state GPIO extcon driver based on extcon class
* *
* Copyright (C) 2012 Samsung Electronics * Copyright (C) 2012 Samsung Electronics
* Author: MyungJoo Ham <myungjoo.ham@samsung.com> * Author: MyungJoo Ham <myungjoo.ham@samsung.com>
...@@ -16,43 +16,31 @@ ...@@ -16,43 +16,31 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* */
*/
#ifndef __EXTCON_GPIO_H__ #ifndef __EXTCON_GPIO_H__
#define __EXTCON_GPIO_H__ __FILE__ #define __EXTCON_GPIO_H__ __FILE__
#include <linux/extcon.h> #include <linux/extcon.h>
/** /**
* struct gpio_extcon_platform_data - A simple GPIO-controlled extcon device. * struct gpio_extcon_pdata - A simple GPIO-controlled extcon device.
* @name: The name of this GPIO extcon device. * @extcon_id: The unique id of specific external connector.
* @gpio: Corresponding GPIO. * @gpio: Corresponding GPIO.
* @gpio_active_low: Boolean describing whether gpio active state is 1 or 0 * @gpio_active_low: Boolean describing whether gpio active state is 1 or 0
* If true, low state of gpio means active. * If true, low state of gpio means active.
* If false, high state of gpio means active. * If false, high state of gpio means active.
* @debounce: Debounce time for GPIO IRQ in ms. * @debounce: Debounce time for GPIO IRQ in ms.
* @irq_flags: IRQ Flags (e.g., IRQF_TRIGGER_LOW). * @irq_flags: IRQ Flags (e.g., IRQF_TRIGGER_LOW).
* @state_on: print_state is overriden with state_on if attached.
* If NULL, default method of extcon class is used.
* @state_off: print_state is overriden with state_off if detached.
* If NUll, default method of extcon class is used.
* @check_on_resume: Boolean describing whether to check the state of gpio * @check_on_resume: Boolean describing whether to check the state of gpio
* while resuming from sleep. * while resuming from sleep.
*
* Note that in order for state_on or state_off to be valid, both state_on
* and state_off should be not NULL. If at least one of them is NULL,
* the print_state is not overriden.
*/ */
struct gpio_extcon_platform_data { struct gpio_extcon_pdata {
const char *name; unsigned int extcon_id;
unsigned gpio; unsigned gpio;
bool gpio_active_low; bool gpio_active_low;
unsigned long debounce; unsigned long debounce;
unsigned long irq_flags; unsigned long irq_flags;
/* if NULL, "0" or "1" will be printed */
const char *state_on;
const char *state_off;
bool check_on_resume; bool check_on_resume;
}; };
......
...@@ -124,6 +124,9 @@ struct arizona_pdata { ...@@ -124,6 +124,9 @@ struct arizona_pdata {
/** Channel to use for headphone detection */ /** Channel to use for headphone detection */
unsigned int hpdet_channel; unsigned int hpdet_channel;
/** Use software comparison to determine mic presence */
bool micd_software_compare;
/** Extra debounce timeout used during initial mic detection (ms) */ /** Extra debounce timeout used during initial mic detection (ms) */
unsigned int micd_detect_debounce; unsigned int micd_detect_debounce;
...@@ -181,6 +184,9 @@ struct arizona_pdata { ...@@ -181,6 +184,9 @@ struct arizona_pdata {
/** GPIO for primary IRQ (used for edge triggered emulation) */ /** GPIO for primary IRQ (used for edge triggered emulation) */
int irq_gpio; int irq_gpio;
/** General purpose switch control */
unsigned int gpsw;
}; };
#endif #endif
...@@ -242,6 +242,7 @@ ...@@ -242,6 +242,7 @@
#define ARIZONA_HP1_SHORT_CIRCUIT_CTRL 0x4A0 #define ARIZONA_HP1_SHORT_CIRCUIT_CTRL 0x4A0
#define ARIZONA_HP2_SHORT_CIRCUIT_CTRL 0x4A1 #define ARIZONA_HP2_SHORT_CIRCUIT_CTRL 0x4A1
#define ARIZONA_HP3_SHORT_CIRCUIT_CTRL 0x4A2 #define ARIZONA_HP3_SHORT_CIRCUIT_CTRL 0x4A2
#define ARIZONA_HP_TEST_CTRL_1 0x4A4
#define ARIZONA_SPK_CTRL_2 0x4B5 #define ARIZONA_SPK_CTRL_2 0x4B5
#define ARIZONA_SPK_CTRL_3 0x4B6 #define ARIZONA_SPK_CTRL_3 0x4B6
#define ARIZONA_DAC_COMP_1 0x4DC #define ARIZONA_DAC_COMP_1 0x4DC
...@@ -2359,9 +2360,9 @@ ...@@ -2359,9 +2360,9 @@
#define ARIZONA_ACCDET_SRC_MASK 0x2000 /* ACCDET_SRC */ #define ARIZONA_ACCDET_SRC_MASK 0x2000 /* ACCDET_SRC */
#define ARIZONA_ACCDET_SRC_SHIFT 13 /* ACCDET_SRC */ #define ARIZONA_ACCDET_SRC_SHIFT 13 /* ACCDET_SRC */
#define ARIZONA_ACCDET_SRC_WIDTH 1 /* ACCDET_SRC */ #define ARIZONA_ACCDET_SRC_WIDTH 1 /* ACCDET_SRC */
#define ARIZONA_ACCDET_MODE_MASK 0x0003 /* ACCDET_MODE - [1:0] */ #define ARIZONA_ACCDET_MODE_MASK 0x0007 /* ACCDET_MODE - [2:0] */
#define ARIZONA_ACCDET_MODE_SHIFT 0 /* ACCDET_MODE - [1:0] */ #define ARIZONA_ACCDET_MODE_SHIFT 0 /* ACCDET_MODE - [2:0] */
#define ARIZONA_ACCDET_MODE_WIDTH 2 /* ACCDET_MODE - [1:0] */ #define ARIZONA_ACCDET_MODE_WIDTH 3 /* ACCDET_MODE - [2:0] */
/* /*
* R667 (0x29B) - Headphone Detect 1 * R667 (0x29B) - Headphone Detect 1
...@@ -3701,6 +3702,13 @@ ...@@ -3701,6 +3702,13 @@
#define ARIZONA_HP3_SC_ENA_SHIFT 12 /* HP3_SC_ENA */ #define ARIZONA_HP3_SC_ENA_SHIFT 12 /* HP3_SC_ENA */
#define ARIZONA_HP3_SC_ENA_WIDTH 1 /* HP3_SC_ENA */ #define ARIZONA_HP3_SC_ENA_WIDTH 1 /* HP3_SC_ENA */
/*
* R1188 (0x4A4) HP Test Ctrl 1
*/
#define ARIZONA_HP1_TST_CAP_SEL_MASK 0x0003 /* HP1_TST_CAP_SEL - [1:0] */
#define ARIZONA_HP1_TST_CAP_SEL_SHIFT 0 /* HP1_TST_CAP_SEL - [1:0] */
#define ARIZONA_HP1_TST_CAP_SEL_WIDTH 2 /* HP1_TST_CAP_SEL - [1:0] */
/* /*
* R1244 (0x4DC) - DAC comp 1 * R1244 (0x4DC) - DAC comp 1
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment