Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 344955
b: refs/heads/master
c: 909582c
h: refs/heads/master
i:
  344953: 27b00ec
  344951: ed40039
v: v3
  • Loading branch information
Lee Jones authored and Samuel Ortiz committed Nov 11, 2012
1 parent 03a53bc commit d6211c1
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 7 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: 5204e51d30ceb9715e3d690efe84c50e2e9d557d
refs/heads/master: 909582caae384418723ccdb00e848f4140257195
48 changes: 42 additions & 6 deletions trunk/drivers/mfd/stmpe.c
Original file line number Diff line number Diff line change
Expand Up @@ -885,18 +885,19 @@ static struct irq_domain_ops stmpe_irq_ops = {
.xlate = irq_domain_xlate_twocell,
};

static int __devinit stmpe_irq_init(struct stmpe *stmpe)
static int __devinit stmpe_irq_init(struct stmpe *stmpe,
struct device_node *np)
{
int base = stmpe->irq_base;
int num_irqs = stmpe->variant->num_irqs;

if (base) {
stmpe->domain = irq_domain_add_legacy(
NULL, num_irqs, base, 0, &stmpe_irq_ops, stmpe);
np, num_irqs, base, 0, &stmpe_irq_ops, stmpe);
}
else {
stmpe->domain = irq_domain_add_linear(
NULL, num_irqs, &stmpe_irq_ops, stmpe);
np, num_irqs, &stmpe_irq_ops, stmpe);
}

if (!stmpe->domain) {
Expand Down Expand Up @@ -1016,15 +1017,50 @@ static int __devinit stmpe_devices_init(struct stmpe *stmpe)
return ret;
}

void __devinit stmpe_of_probe(struct stmpe_platform_data *pdata,
struct device_node *np)
{
struct device_node *child;

of_property_read_u32(np, "st,autosleep-timeout",
&pdata->autosleep_timeout);

pdata->autosleep = (pdata->autosleep_timeout) ? true : false;

for_each_child_of_node(np, child) {
if (!strcmp(child->name, "stmpe_gpio")) {
pdata->blocks |= STMPE_BLOCK_GPIO;
}
if (!strcmp(child->name, "stmpe_keypad")) {
pdata->blocks |= STMPE_BLOCK_KEYPAD;
}
if (!strcmp(child->name, "stmpe_touchscreen")) {
pdata->blocks |= STMPE_BLOCK_TOUCHSCREEN;
}
if (!strcmp(child->name, "stmpe_adc")) {
pdata->blocks |= STMPE_BLOCK_ADC;
}
}
}

/* Called from client specific probe routines */
int __devinit stmpe_probe(struct stmpe_client_info *ci, int partnum)
{
struct stmpe_platform_data *pdata = dev_get_platdata(ci->dev);
struct device_node *np = ci->dev->of_node;
struct stmpe *stmpe;
int ret;

if (!pdata)
return -EINVAL;
if (!pdata) {
if (np) {
pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
if (!pdata)
return -ENOMEM;

stmpe_of_probe(pdata, np);
} else
return -EINVAL;
}

stmpe = kzalloc(sizeof(struct stmpe), GFP_KERNEL);
if (!stmpe)
Expand Down Expand Up @@ -1080,7 +1116,7 @@ int __devinit stmpe_probe(struct stmpe_client_info *ci, int partnum)
goto free_gpio;

if (stmpe->irq >= 0) {
ret = stmpe_irq_init(stmpe);
ret = stmpe_irq_init(stmpe, np);
if (ret)
goto free_gpio;

Expand Down

0 comments on commit d6211c1

Please sign in to comment.