@@ -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>;
@@ -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, ®_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},
{}
};