diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/Kconfig | 4 | ||||
-rw-r--r-- | drivers/media/video/mt9m111.c | 28 |
2 files changed, 18 insertions, 14 deletions
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index eb9ff7e107d6..da538d9ca303 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig | |||
@@ -736,10 +736,10 @@ config MT9M001_PCA9536_SWITCH | |||
736 | extender to switch between 8 and 10 bit datawidth modes | 736 | extender to switch between 8 and 10 bit datawidth modes |
737 | 737 | ||
738 | config SOC_CAMERA_MT9M111 | 738 | config SOC_CAMERA_MT9M111 |
739 | tristate "mt9m111 support" | 739 | tristate "mt9m111 and mt9m112 support" |
740 | depends on SOC_CAMERA && I2C | 740 | depends on SOC_CAMERA && I2C |
741 | help | 741 | help |
742 | This driver supports MT9M111 cameras from Micron | 742 | This driver supports MT9M111 and MT9M112 cameras from Micron |
743 | 743 | ||
744 | config SOC_CAMERA_MT9V022 | 744 | config SOC_CAMERA_MT9V022 |
745 | tristate "mt9v022 support" | 745 | tristate "mt9v022 support" |
diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c index 2ab1e0f4925d..3dfeea4e94b1 100644 --- a/drivers/media/video/mt9m111.c +++ b/drivers/media/video/mt9m111.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Driver for MT9M111 CMOS Image Sensor from Micron | 2 | * Driver for MT9M111/MT9M112 CMOS Image Sensor from Micron |
3 | * | 3 | * |
4 | * Copyright (C) 2008, Robert Jarzmik <robert.jarzmik@free.fr> | 4 | * Copyright (C) 2008, Robert Jarzmik <robert.jarzmik@free.fr> |
5 | * | 5 | * |
@@ -19,7 +19,7 @@ | |||
19 | #include <media/soc_camera.h> | 19 | #include <media/soc_camera.h> |
20 | 20 | ||
21 | /* | 21 | /* |
22 | * mt9m111 i2c address is 0x5d or 0x48 (depending on SAddr pin) | 22 | * mt9m111 and mt9m112 i2c address is 0x5d or 0x48 (depending on SAddr pin) |
23 | * The platform has to define i2c_board_info and call i2c_register_board_info() | 23 | * The platform has to define i2c_board_info and call i2c_register_board_info() |
24 | */ | 24 | */ |
25 | 25 | ||
@@ -150,7 +150,7 @@ enum mt9m111_context { | |||
150 | struct mt9m111 { | 150 | struct mt9m111 { |
151 | struct i2c_client *client; | 151 | struct i2c_client *client; |
152 | struct soc_camera_device icd; | 152 | struct soc_camera_device icd; |
153 | int model; /* V4L2_IDENT_MT9M111* codes from v4l2-chip-ident.h */ | 153 | int model; /* V4L2_IDENT_MT9M11x* codes from v4l2-chip-ident.h */ |
154 | enum mt9m111_context context; | 154 | enum mt9m111_context context; |
155 | unsigned int left, top, width, height; | 155 | unsigned int left, top, width, height; |
156 | u32 pixfmt; | 156 | u32 pixfmt; |
@@ -846,7 +846,7 @@ static int mt9m111_init(struct soc_camera_device *icd) | |||
846 | if (!ret) | 846 | if (!ret) |
847 | ret = mt9m111_set_autoexposure(icd, mt9m111->autoexposure); | 847 | ret = mt9m111_set_autoexposure(icd, mt9m111->autoexposure); |
848 | if (ret) | 848 | if (ret) |
849 | dev_err(&icd->dev, "mt9m111 init failed: %d\n", ret); | 849 | dev_err(&icd->dev, "mt9m11x init failed: %d\n", ret); |
850 | return ret; | 850 | return ret; |
851 | } | 851 | } |
852 | 852 | ||
@@ -856,7 +856,7 @@ static int mt9m111_release(struct soc_camera_device *icd) | |||
856 | 856 | ||
857 | ret = mt9m111_disable(icd); | 857 | ret = mt9m111_disable(icd); |
858 | if (ret < 0) | 858 | if (ret < 0) |
859 | dev_err(&icd->dev, "mt9m111 release failed: %d\n", ret); | 859 | dev_err(&icd->dev, "mt9m11x release failed: %d\n", ret); |
860 | 860 | ||
861 | return ret; | 861 | return ret; |
862 | } | 862 | } |
@@ -889,19 +889,23 @@ static int mt9m111_video_probe(struct soc_camera_device *icd) | |||
889 | data = reg_read(CHIP_VERSION); | 889 | data = reg_read(CHIP_VERSION); |
890 | 890 | ||
891 | switch (data) { | 891 | switch (data) { |
892 | case 0x143a: | 892 | case 0x143a: /* MT9M111 */ |
893 | mt9m111->model = V4L2_IDENT_MT9M111; | 893 | mt9m111->model = V4L2_IDENT_MT9M111; |
894 | icd->formats = mt9m111_colour_formats; | 894 | break; |
895 | icd->num_formats = ARRAY_SIZE(mt9m111_colour_formats); | 895 | case 0x148c: /* MT9M112 */ |
896 | mt9m111->model = V4L2_IDENT_MT9M112; | ||
896 | break; | 897 | break; |
897 | default: | 898 | default: |
898 | ret = -ENODEV; | 899 | ret = -ENODEV; |
899 | dev_err(&icd->dev, | 900 | dev_err(&icd->dev, |
900 | "No MT9M111 chip detected, register read %x\n", data); | 901 | "No MT9M11x chip detected, register read %x\n", data); |
901 | goto ei2c; | 902 | goto ei2c; |
902 | } | 903 | } |
903 | 904 | ||
904 | dev_info(&icd->dev, "Detected a MT9M111 chip ID 0x143a\n"); | 905 | icd->formats = mt9m111_colour_formats; |
906 | icd->num_formats = ARRAY_SIZE(mt9m111_colour_formats); | ||
907 | |||
908 | dev_info(&icd->dev, "Detected a MT9M11x chip ID %x\n", data); | ||
905 | 909 | ||
906 | ret = soc_camera_video_start(icd); | 910 | ret = soc_camera_video_start(icd); |
907 | if (ret) | 911 | if (ret) |
@@ -938,7 +942,7 @@ static int mt9m111_probe(struct i2c_client *client, | |||
938 | int ret; | 942 | int ret; |
939 | 943 | ||
940 | if (!icl) { | 944 | if (!icl) { |
941 | dev_err(&client->dev, "MT9M111 driver needs platform data\n"); | 945 | dev_err(&client->dev, "MT9M11x driver needs platform data\n"); |
942 | return -EINVAL; | 946 | return -EINVAL; |
943 | } | 947 | } |
944 | 948 | ||
@@ -1017,6 +1021,6 @@ static void __exit mt9m111_mod_exit(void) | |||
1017 | module_init(mt9m111_mod_init); | 1021 | module_init(mt9m111_mod_init); |
1018 | module_exit(mt9m111_mod_exit); | 1022 | module_exit(mt9m111_mod_exit); |
1019 | 1023 | ||
1020 | MODULE_DESCRIPTION("Micron MT9M111 Camera driver"); | 1024 | MODULE_DESCRIPTION("Micron MT9M111/MT9M112 Camera driver"); |
1021 | MODULE_AUTHOR("Robert Jarzmik"); | 1025 | MODULE_AUTHOR("Robert Jarzmik"); |
1022 | MODULE_LICENSE("GPL"); | 1026 | MODULE_LICENSE("GPL"); |