From: Pavel Machek <pavel@ucw.cz>
To: pali.rohar@gmail.com, sre@kernel.org,
"kernel list" <linux-kernel@vger.kernel.org>,
linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
linux-omap@vger.kernel.org, tony@atomide.com, khilman@kernel.org,
aaro.koskinen@iki.fi, ivo.g.dimitrov.75@gmail.com,
patrikbachan@gmail.com, serge@hallyn.com, abcloriens@gmail.com,
clayton@craftyguy.net, martijn@brixit.nl,
sakari.ailus@linux.intel.com, arnd@arndb.de,
"Filip Matijević" <filip.matijevic.pz@gmail.com>
Subject: bh1770 hacks: get it to work on n950
Date: Thu, 16 Nov 2017 12:57:03 +0100 [thread overview]
Message-ID: <20171116115703.GA26735@amd> (raw)
[-- Attachment #1: Type: text/plain, Size: 5018 bytes --]
Hi!
Ok, not for application, but I can get light sensor to work.
Signed-off-by: Pavel Machek <pavel@ucw.cz>
diff --git a/arch/arm/boot/dts/omap3-n950.dts b/arch/arm/boot/dts/omap3-n950.dts
index 50c4fc6..15841f7 100644
--- a/arch/arm/boot/dts/omap3-n950.dts
+++ b/arch/arm/boot/dts/omap3-n950.dts
@@ -150,6 +150,23 @@
};
};
+ bh1770@38 {
+ compatible = "bh1770glc";
+ reg = <0x38>;
+
+ vdd-supply = <&vaux1>;
+ leds-supply = <&vaux1>; /* FIXME: really on vbat */
+
+ /* GPIO 83 on n950.
+ .leds = BHSFH_LED1,
+ .led_max_curr = BHSFH_LED_100mA,
+ .led_def_curr = BHSFH_LED_50mA,
+ .glass_attenuation = (16384 * 385) / 100, ... about 3.85x filtering
+ */
+ };
+
+ /* Also TLV320DAC33 and TPA6130A2 */
+
touch@4b {
compatible = "atmel,maxtouch";
reg = <0x4b>;
diff --git a/drivers/misc/bh1770glc.c b/drivers/misc/bh1770glc.c
index 9c62bf0..f08df29 100644
--- a/drivers/misc/bh1770glc.c
+++ b/drivers/misc/bh1770glc.c
@@ -22,6 +22,7 @@
*
*/
+#define DEBUG
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/i2c.h>
@@ -525,16 +526,22 @@ static int bh1770_detect(struct bh1770_chip *chip)
s32 ret;
u8 manu, part;
+ printk("Detect...\n");
+
ret = i2c_smbus_read_byte_data(client, BH1770_MANUFACT_ID);
if (ret < 0)
goto error;
manu = (u8)ret;
+ printk("Detect... manufact\n");
+
ret = i2c_smbus_read_byte_data(client, BH1770_PART_ID);
if (ret < 0)
goto error;
part = (u8)ret;
+ printk("Detect... part ... got %x %x\n", manu, part);
+
chip->revision = (part & BH1770_REV_MASK) >> BH1770_REV_SHIFT;
chip->prox_coef = BH1770_COEF_SCALER;
chip->prox_const = 0;
@@ -1179,6 +1186,8 @@ static const struct attribute_group bh1770_attribute_group = {
.attrs = sysfs_attrs
};
+struct bh1770_platform_data def = {};
+
static int bh1770_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -1189,6 +1198,8 @@ static int bh1770_probe(struct i2c_client *client,
if (!chip)
return -ENOMEM;
+ printk("bh1770: probe\n");
+
i2c_set_clientdata(client, chip);
chip->client = client;
@@ -1198,10 +1209,12 @@ static int bh1770_probe(struct i2c_client *client,
if (client->dev.platform_data == NULL) {
dev_err(&client->dev, "platform data is mandatory\n");
- return -EINVAL;
+ //return -EINVAL;
}
chip->pdata = client->dev.platform_data;
+ if (!chip->pdata)
+ chip->pdata = &def;
chip->lux_calib = BH1770_LUX_NEUTRAL_CALIB_VALUE;
chip->lux_rate_index = BH1770_LUX_DEFAULT_RATE;
chip->lux_threshold_lo = BH1770_LUX_DEF_THRES;
@@ -1220,6 +1233,8 @@ static int bh1770_probe(struct i2c_client *client,
chip->prox_rate = BH1770_PROX_DEFAULT_RATE;
chip->prox_data = 0;
+ printk("bh1770: regulators\n");
+
chip->regs[0].supply = reg_vcc;
chip->regs[1].supply = reg_vleds;
@@ -1227,14 +1242,12 @@ static int bh1770_probe(struct i2c_client *client,
ARRAY_SIZE(chip->regs), chip->regs);
if (err < 0) {
dev_err(&client->dev, "Cannot get regulators\n");
- return err;
}
err = regulator_bulk_enable(ARRAY_SIZE(chip->regs),
chip->regs);
if (err < 0) {
dev_err(&client->dev, "Cannot enable regulators\n");
- return err;
}
usleep_range(BH1770_STARTUP_DELAY, BH1770_STARTUP_DELAY * 2);
@@ -1242,6 +1255,8 @@ static int bh1770_probe(struct i2c_client *client,
if (err < 0)
goto fail0;
+ printk("bh1770: detected\n");
+
/* Start chip */
bh1770_chip_on(chip);
pm_runtime_set_active(&client->dev);
@@ -1269,6 +1284,8 @@ static int bh1770_probe(struct i2c_client *client,
goto fail1;
}
+ printk("bh1770: sysfs ok\n");
+
/*
* Chip needs level triggered interrupt to work. However,
* level triggering doesn't work always correctly with power
@@ -1282,8 +1299,12 @@ static int bh1770_probe(struct i2c_client *client,
if (err) {
dev_err(&client->dev, "could not get IRQ %d\n",
client->irq);
- goto fail2;
+ //goto fail2;
}
+
+ printk("bh1770: irq ok, all done\n");
+ err = 0;
+
regulator_bulk_disable(ARRAY_SIZE(chip->regs), chip->regs);
return err;
fail2:
@@ -1393,10 +1414,18 @@ static const struct dev_pm_ops bh1770_pm_ops = {
SET_RUNTIME_PM_OPS(bh1770_runtime_suspend, bh1770_runtime_resume, NULL)
};
+#ifdef CONFIG_OF
+static const struct of_device_id bh1770_of_match_table[] = {
+ { .compatible = "bq27200" },
+};
+MODULE_DEVICE_TABLE(of, bh1770_of_match_table);
+#endif
+
static struct i2c_driver bh1770_driver = {
.driver = {
.name = "bh1770glc",
.pm = &bh1770_pm_ops,
+ .of_match_table = of_match_ptr(bh1770_of_match_table),
},
.probe = bh1770_probe,
.remove = bh1770_remove,
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
next reply other threads:[~2017-11-16 11:57 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-16 11:57 Pavel Machek [this message]
2017-11-17 11:35 ` bh1770 hacks: get it to work on n950 Sebastian Reichel
2017-11-19 12:41 ` Pavel Machek
2017-11-19 14:12 ` Ladislav Michl
2017-11-19 15:07 ` Pavel Machek
2017-11-19 21:10 ` Sebastian Reichel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171116115703.GA26735@amd \
--to=pavel@ucw.cz \
--cc=aaro.koskinen@iki.fi \
--cc=abcloriens@gmail.com \
--cc=arnd@arndb.de \
--cc=clayton@craftyguy.net \
--cc=filip.matijevic.pz@gmail.com \
--cc=ivo.g.dimitrov.75@gmail.com \
--cc=khilman@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=martijn@brixit.nl \
--cc=pali.rohar@gmail.com \
--cc=patrikbachan@gmail.com \
--cc=sakari.ailus@linux.intel.com \
--cc=serge@hallyn.com \
--cc=sre@kernel.org \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).