linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 --]

             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).