extcon: usbc-tusb320: Factor out extcon into dedicated functions
Move extcon code into separate functions in preparation for addition of USB TYPE-C support. No functional change. Signed-off-by: Marek Vasut <marex@denx.de> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
This commit is contained in:
parent
7e18e42e4b
commit
9483811a12
@ -184,19 +184,9 @@ static struct tusb320_ops tusb320l_ops = {
|
|||||||
.get_revision = tusb320l_get_revision,
|
.get_revision = tusb320l_get_revision,
|
||||||
};
|
};
|
||||||
|
|
||||||
static irqreturn_t tusb320_irq_handler(int irq, void *dev_id)
|
static void tusb320_extcon_irq_handler(struct tusb320_priv *priv, u8 reg)
|
||||||
{
|
{
|
||||||
struct tusb320_priv *priv = dev_id;
|
|
||||||
int state, polarity;
|
int state, polarity;
|
||||||
unsigned reg;
|
|
||||||
|
|
||||||
if (regmap_read(priv->regmap, TUSB320_REG9, ®)) {
|
|
||||||
dev_err(priv->dev, "error during i2c read!\n");
|
|
||||||
return IRQ_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(reg & TUSB320_REG9_INTERRUPT_STATUS))
|
|
||||||
return IRQ_NONE;
|
|
||||||
|
|
||||||
state = (reg >> TUSB320_REG9_ATTACHED_STATE_SHIFT) &
|
state = (reg >> TUSB320_REG9_ATTACHED_STATE_SHIFT) &
|
||||||
TUSB320_REG9_ATTACHED_STATE_MASK;
|
TUSB320_REG9_ATTACHED_STATE_MASK;
|
||||||
@ -219,6 +209,22 @@ static irqreturn_t tusb320_irq_handler(int irq, void *dev_id)
|
|||||||
extcon_sync(priv->edev, EXTCON_USB_HOST);
|
extcon_sync(priv->edev, EXTCON_USB_HOST);
|
||||||
|
|
||||||
priv->state = state;
|
priv->state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
static irqreturn_t tusb320_irq_handler(int irq, void *dev_id)
|
||||||
|
{
|
||||||
|
struct tusb320_priv *priv = dev_id;
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
if (regmap_read(priv->regmap, TUSB320_REG9, ®)) {
|
||||||
|
dev_err(priv->dev, "error during i2c read!\n");
|
||||||
|
return IRQ_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(reg & TUSB320_REG9_INTERRUPT_STATUS))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
|
tusb320_extcon_irq_handler(priv, reg);
|
||||||
|
|
||||||
regmap_write(priv->regmap, TUSB320_REG9, reg);
|
regmap_write(priv->regmap, TUSB320_REG9, reg);
|
||||||
|
|
||||||
@ -230,8 +236,32 @@ static const struct regmap_config tusb320_regmap_config = {
|
|||||||
.val_bits = 8,
|
.val_bits = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int tusb320_extcon_probe(struct i2c_client *client,
|
static int tusb320_extcon_probe(struct tusb320_priv *priv)
|
||||||
const struct i2c_device_id *id)
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
priv->edev = devm_extcon_dev_allocate(priv->dev, tusb320_extcon_cable);
|
||||||
|
if (IS_ERR(priv->edev)) {
|
||||||
|
dev_err(priv->dev, "failed to allocate extcon device\n");
|
||||||
|
return PTR_ERR(priv->edev);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = devm_extcon_dev_register(priv->dev, priv->edev);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(priv->dev, "failed to register extcon device\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
extcon_set_property_capability(priv->edev, EXTCON_USB,
|
||||||
|
EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||||
|
extcon_set_property_capability(priv->edev, EXTCON_USB_HOST,
|
||||||
|
EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tusb320_probe(struct i2c_client *client,
|
||||||
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
struct tusb320_priv *priv;
|
struct tusb320_priv *priv;
|
||||||
const void *match_data;
|
const void *match_data;
|
||||||
@ -257,12 +287,6 @@ static int tusb320_extcon_probe(struct i2c_client *client,
|
|||||||
|
|
||||||
priv->ops = (struct tusb320_ops*)match_data;
|
priv->ops = (struct tusb320_ops*)match_data;
|
||||||
|
|
||||||
priv->edev = devm_extcon_dev_allocate(priv->dev, tusb320_extcon_cable);
|
|
||||||
if (IS_ERR(priv->edev)) {
|
|
||||||
dev_err(priv->dev, "failed to allocate extcon device\n");
|
|
||||||
return PTR_ERR(priv->edev);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->ops->get_revision) {
|
if (priv->ops->get_revision) {
|
||||||
ret = priv->ops->get_revision(priv, &revision);
|
ret = priv->ops->get_revision(priv, &revision);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -272,16 +296,9 @@ static int tusb320_extcon_probe(struct i2c_client *client,
|
|||||||
dev_info(priv->dev, "chip revision %d\n", revision);
|
dev_info(priv->dev, "chip revision %d\n", revision);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = devm_extcon_dev_register(priv->dev, priv->edev);
|
ret = tusb320_extcon_probe(priv);
|
||||||
if (ret < 0) {
|
if (ret)
|
||||||
dev_err(priv->dev, "failed to register extcon device\n");
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
|
|
||||||
extcon_set_property_capability(priv->edev, EXTCON_USB,
|
|
||||||
EXTCON_PROP_USB_TYPEC_POLARITY);
|
|
||||||
extcon_set_property_capability(priv->edev, EXTCON_USB_HOST,
|
|
||||||
EXTCON_PROP_USB_TYPEC_POLARITY);
|
|
||||||
|
|
||||||
/* update initial state */
|
/* update initial state */
|
||||||
tusb320_irq_handler(client->irq, priv);
|
tusb320_irq_handler(client->irq, priv);
|
||||||
@ -313,7 +330,7 @@ static const struct of_device_id tusb320_extcon_dt_match[] = {
|
|||||||
MODULE_DEVICE_TABLE(of, tusb320_extcon_dt_match);
|
MODULE_DEVICE_TABLE(of, tusb320_extcon_dt_match);
|
||||||
|
|
||||||
static struct i2c_driver tusb320_extcon_driver = {
|
static struct i2c_driver tusb320_extcon_driver = {
|
||||||
.probe = tusb320_extcon_probe,
|
.probe = tusb320_probe,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "extcon-tusb320",
|
.name = "extcon-tusb320",
|
||||||
.of_match_table = tusb320_extcon_dt_match,
|
.of_match_table = tusb320_extcon_dt_match,
|
||||||
|
Loading…
Reference in New Issue
Block a user