Hi!

> It seems lm3559 flash driver is available on github (
> https://github.com/ZenfoneArea/android_kernel_asus_zenfone5/tree/master/linux/modules/camera/drivers/media/i2c
> ) but there'll be some fun getting it cleaned up and merged.
> 
> Did anyone start doing anything in that area? Is there possibly better
> source to start from?

It turned out to be easier than expected. Of course, using flash w/o
v4l will not be easy, but that's generic problem.

                                                                        Pavel

diff --git a/arch/arm/boot/dts/omap4-droid4-xt894.dts 
b/arch/arm/boot/dts/omap4-droid4-xt894.dts
index bdf73cb..45305e8 100644
--- a/arch/arm/boot/dts/omap4-droid4-xt894.dts
+++ b/arch/arm/boot/dts/omap4-droid4-xt894.dts
@@ -271,6 +271,34 @@
        };
 };
 
+&i2c3 {
+      rearcam: camera@36 {
+            compatible = "micron,ov8820";
+           reg = <0x36>;
+           clocks = <&auxclk1_ck>;
+           clock-names = "xvclk";
+           clock-frequency = <24000000>;
+           power-gpios = <&gpio2 16 GPIO_ACTIVE_HIGH>, // gpio48
+                         <&gpio3 19 GPIO_ACTIVE_HIGH>, // gpio83
+                         <&gpio5 23 GPIO_ACTIVE_HIGH>; // gpio151
+      };
+      frontcam: camera@48 {
+                       compatible = "ovti,mt9m114";
+               reg = <0x48>;
+               clocks = <&auxclk2_ck>;
+               clock-names = "extclk";
+               clock-frequency = <24000000>;
+               power-gpios = <&gpio6 11 GPIO_ACTIVE_HIGH>, // gpio171
+                             <&gpio2 5 GPIO_ACTIVE_HIGH>; // gpio37
+               };
+       flashlight: flash@53 {
+           compatible = "ti,lm3559";
+           reg = <0x53>;
+       };
+};
+
+
+
 &keypad {
        keypad,num-rows = <8>;
        keypad,num-columns = <8>;
diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
index b600e03a..a9b2ba2 100644
--- a/drivers/media/i2c/lm3560.c
+++ b/drivers/media/i2c/lm3560.c
@@ -17,6 +17,8 @@
  * General Public License for more details.
  */
 
+// Probably compatible with lm3559, too.
+
 #include <linux/delay.h>
 #include <linux/module.h>
 #include <linux/i2c.h>
@@ -395,6 +397,22 @@ static int lm3560_init_device(struct lm3560_flash *flash)
                return rval;
        /* reset faults */
        rval = regmap_read(flash->regmap, REG_FLAG, &reg_val);
+
+       printk("lm3560: Device initialized\n");
+
+       flash->led_mode = V4L2_FLASH_LED_MODE_TORCH;
+       rval = lm3560_mode_ctrl(flash);
+       rval = lm3560_torch_brt_ctrl(flash, 0, LM3560_TORCH_BRT_MIN);
+       rval = lm3560_torch_brt_ctrl(flash, 1, LM3560_TORCH_BRT_MIN);           
+
+       mdelay(1000);
+
+       rval = lm3560_torch_brt_ctrl(flash, 0, 0);
+       rval = lm3560_torch_brt_ctrl(flash, 1, 0);              
+       
+       flash->led_mode = V4L2_FLASH_LED_MODE_NONE;
+       rval = lm3560_mode_ctrl(flash);
+       
        return rval;
 }
 
@@ -405,6 +423,8 @@ static int lm3560_probe(struct i2c_client *client,
        struct lm3560_platform_data *pdata = dev_get_platdata(&client->dev);
        int rval;
 
+       printk("3560: probe\n");
+
        flash = devm_kzalloc(&client->dev, sizeof(*flash), GFP_KERNEL);
        if (flash == NULL)
                return -ENOMEM;
@@ -417,17 +437,19 @@ static int lm3560_probe(struct i2c_client *client,
 
        /* if there is no platform data, use chip default value */
        if (pdata == NULL) {
+               printk("3560: no pdata\n");
+               
                pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
                if (pdata == NULL)
                        return -ENODEV;
-               pdata->peak = LM3560_PEAK_3600mA;
-               pdata->max_flash_timeout = LM3560_FLASH_TOUT_MAX;
+               pdata->peak = LM3560_PEAK_1600mA;
+               pdata->max_flash_timeout = LM3560_FLASH_TOUT_MIN;
                /* led 1 */
-               pdata->max_flash_brt[LM3560_LED0] = LM3560_FLASH_BRT_MAX;
-               pdata->max_torch_brt[LM3560_LED0] = LM3560_TORCH_BRT_MAX;
+               pdata->max_flash_brt[LM3560_LED0] = LM3560_FLASH_BRT_MIN;
+               pdata->max_torch_brt[LM3560_LED0] = LM3560_TORCH_BRT_MIN;
                /* led 2 */
-               pdata->max_flash_brt[LM3560_LED1] = LM3560_FLASH_BRT_MAX;
-               pdata->max_torch_brt[LM3560_LED1] = LM3560_TORCH_BRT_MAX;
+               pdata->max_flash_brt[LM3560_LED1] = LM3560_FLASH_BRT_MIN;
+               pdata->max_torch_brt[LM3560_LED1] = LM3560_TORCH_BRT_MIN;
        }
        flash->pdata = pdata;
        flash->dev = &client->dev;
@@ -466,6 +488,8 @@ static int lm3560_remove(struct i2c_client *client)
 
 static const struct i2c_device_id lm3560_id_table[] = {
        {LM3560_NAME, 0},
+       {"lm3559", 0},
+       {"ti,lm3559", 0},
        {}
 };
 



-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

Attachment: signature.asc
Description: Digital signature

Reply via email to