Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 355089
b: refs/heads/master
c: 07c7050
h: refs/heads/master
i:
  355087: 79b7c34
v: v3
  • Loading branch information
Chanwoo Choi committed Feb 13, 2013
1 parent f9bd54c commit 047e727
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e3e5bc02d2365d3e09164fd9a559011399ca2a4f
refs/heads/master: 07c70503a420d48402b3859e2c1c4c847a130a8b
62 changes: 51 additions & 11 deletions trunk/drivers/extcon/extcon-max8997.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,16 +94,61 @@ static const char *max8997_extcon_cable[] = {
NULL,
};

/*
* max8997_muic_set_path - Set hardware line according to attached cable
* @info: the instance including private data of max8997 MUIC
* @value: the path according to attached cable
* @attached: the state of cable (true:attached, false:detached)
*
* The max8997 MUIC device share outside H/W line among a varity of cables,
* so this function set internal path of H/W line according to the type of
* attached cable.
*/
static int max8997_muic_set_path(struct max8997_muic_info *info,
u8 val, bool attached)
{
int ret = 0;
u8 ctrl1, ctrl2 = 0;

if (attached)
ctrl1 = val;
else
ctrl1 = CONTROL1_SW_OPEN;

ret = max8997_update_reg(info->muic,
MAX8997_MUIC_REG_CONTROL1, ctrl1, COMP_SW_MASK);
if (ret < 0) {
dev_err(info->dev, "failed to update MUIC register\n");
return -EAGAIN;
}

if (attached)
ctrl2 |= CONTROL2_CPEN_MASK; /* LowPwr=0, CPEn=1 */
else
ctrl2 |= CONTROL2_LOWPWR_MASK; /* LowPwr=1, CPEn=0 */

ret = max8997_update_reg(info->muic,
MAX8997_MUIC_REG_CONTROL2, ctrl2,
CONTROL2_LOWPWR_MASK | CONTROL2_CPEN_MASK);
if (ret < 0) {
dev_err(info->dev, "failed to update MUIC register\n");
return -EAGAIN;
}

dev_info(info->dev,
"CONTROL1 : 0x%02x, CONTROL2 : 0x%02x, state : %s\n",
ctrl1, ctrl2, attached ? "attached" : "detached");

return 0;
}

static int max8997_muic_handle_usb(struct max8997_muic_info *info,
enum max8997_muic_usb_type usb_type, bool attached)
{
int ret = 0;

if (usb_type == MAX8997_USB_HOST) {
/* switch to USB */
ret = max8997_update_reg(info->muic, MAX8997_MUIC_REG_CONTROL1,
attached ? CONTROL1_SW_USB : CONTROL1_SW_OPEN,
CONTROL1_SW_MASK);
ret = max8997_muic_set_path(info, CONTROL1_SW_USB, attached);
if (ret) {
dev_err(info->dev, "failed to update muic register\n");
goto out;
Expand Down Expand Up @@ -131,10 +176,7 @@ static int max8997_muic_handle_dock(struct max8997_muic_info *info,
{
int ret = 0;

/* switch to AUDIO */
ret = max8997_update_reg(info->muic, MAX8997_MUIC_REG_CONTROL1,
attached ? CONTROL1_SW_AUDIO : CONTROL1_SW_OPEN,
CONTROL1_SW_MASK);
ret = max8997_muic_set_path(info, CONTROL1_SW_AUDIO, attached);
if (ret) {
dev_err(info->dev, "failed to update muic register\n");
goto out;
Expand All @@ -161,9 +203,7 @@ static int max8997_muic_handle_jig_uart(struct max8997_muic_info *info,
int ret = 0;

/* switch to UART */
ret = max8997_update_reg(info->muic, MAX8997_MUIC_REG_CONTROL1,
attached ? CONTROL1_SW_UART : CONTROL1_SW_OPEN,
CONTROL1_SW_MASK);
ret = max8997_muic_set_path(info, CONTROL1_SW_UART, attached);
if (ret) {
dev_err(info->dev, "failed to update muic register\n");
goto out;
Expand Down
19 changes: 18 additions & 1 deletion trunk/include/linux/mfd/max8997-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ enum max8997_muic_reg {
#define COMP2SW_SHIFT 3
#define COMN1SW_MASK (0x7 << COMN1SW_SHIFT)
#define COMP2SW_MASK (0x7 << COMP2SW_SHIFT)
#define CONTROL1_SW_MASK (COMP2SW_MASK | COMN1SW_MASK)
#define COMP_SW_MASK (COMP2SW_MASK | COMN1SW_MASK)

#define CONTROL1_SW_USB ((1 << COMP2SW_SHIFT) \
| (1 << COMN1SW_SHIFT))
Expand All @@ -234,6 +234,23 @@ enum max8997_muic_reg {
#define CONTROL1_SW_OPEN ((0 << COMP2SW_SHIFT) \
| (0 << COMN1SW_SHIFT))

#define CONTROL2_LOWPWR_SHIFT (0)
#define CONTROL2_ADCEN_SHIFT (1)
#define CONTROL2_CPEN_SHIFT (2)
#define CONTROL2_SFOUTASRT_SHIFT (3)
#define CONTROL2_SFOUTORD_SHIFT (4)
#define CONTROL2_ACCDET_SHIFT (5)
#define CONTROL2_USBCPINT_SHIFT (6)
#define CONTROL2_RCPS_SHIFT (7)
#define CONTROL2_LOWPWR_MASK (0x1 << CONTROL2_LOWPWR_SHIFT)
#define CONTROL2_ADCEN_MASK (0x1 << CONTROL2_ADCEN_SHIFT)
#define CONTROL2_CPEN_MASK (0x1 << CONTROL2_CPEN_SHIFT)
#define CONTROL2_SFOUTASRT_MASK (0x1 << CONTROL2_SFOUTASRT_SHIFT)
#define CONTROL2_SFOUTORD_MASK (0x1 << CONTROL2_SFOUTORD_SHIFT)
#define CONTROL2_ACCDET_MASK (0x1 << CONTROL2_ACCDET_SHIFT)
#define CONTROL2_USBCPINT_MASK (0x1 << CONTROL2_USBCPINT_SHIFT)
#define CONTROL2_RCPS_MASK (0x1 << CONTROL2_RCPS_SHIFT)

#define MAX8997_ADC_GROUND 0x00
#define MAX8997_ADC_MHL 0x01
#define MAX8997_ADC_JIG_USB_1 0x18
Expand Down

0 comments on commit 047e727

Please sign in to comment.