Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (5355): Add VIDIOC_G_CHIP_IDENT to various i2c modules

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
74cab31c 1a0adaf3

+118 -4
+4
drivers/media/video/cs53l32a.c
··· 28 28 #include <linux/i2c-id.h> 29 29 #include <linux/videodev.h> 30 30 #include <media/v4l2-common.h> 31 + #include <media/v4l2-chip-ident.h> 31 32 32 33 MODULE_DESCRIPTION("i2c device driver for cs53l32a Audio ADC"); 33 34 MODULE_AUTHOR("Martin Vaughan"); ··· 103 102 cs53l32a_write(client, 0x04, (u8) ctrl->value); 104 103 cs53l32a_write(client, 0x05, (u8) ctrl->value); 105 104 break; 105 + 106 + case VIDIOC_G_CHIP_IDENT: 107 + return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_CS53l32A, 0); 106 108 107 109 case VIDIOC_LOG_STATUS: 108 110 {
+5
drivers/media/video/msp3400-driver.c
··· 773 773 break; 774 774 } 775 775 776 + case VIDIOC_G_CHIP_IDENT: 777 + return v4l2_chip_ident_i2c_client(client, arg, state->ident, (state->rev1 << 16) | state->rev2); 778 + 776 779 default: 777 780 /* unknown */ 778 781 return -EINVAL; ··· 875 872 snprintf(client->name, sizeof(client->name), "MSP%d4%02d%c-%c%d", 876 873 msp_family, msp_product, 877 874 msp_revision, msp_hard, msp_rom); 875 + /* Rev B=2, C=3, D=4, G=7 */ 876 + state->ident = msp_family * 10000 + 4000 + msp_product * 10 + msp_revision - '@'; 878 877 879 878 /* Has NICAM support: all mspx41x and mspx45x products have NICAM */ 880 879 state->has_nicam = msp_prod_hi == 1 || msp_prod_hi == 5;
+1
drivers/media/video/msp3400-driver.h
··· 50 50 51 51 struct msp_state { 52 52 int rev1, rev2; 53 + int ident; 53 54 u8 has_nicam; 54 55 u8 has_radio; 55 56 u8 has_headphones;
+4
drivers/media/video/tvaudio.c
··· 33 33 34 34 #include <media/tvaudio.h> 35 35 #include <media/v4l2-common.h> 36 + #include <media/v4l2-chip-ident.h> 36 37 37 38 #include <media/i2c-addr.h> 38 39 ··· 1776 1775 /* the thread will call checkmode() later */ 1777 1776 } 1778 1777 break; 1778 + 1779 + case VIDIOC_G_CHIP_IDENT: 1780 + return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_TVAUDIO, 0); 1779 1781 } 1780 1782 return 0; 1781 1783 }
+4
drivers/media/video/upd64031a.c
··· 27 27 #include <linux/i2c.h> 28 28 #include <linux/videodev2.h> 29 29 #include <media/v4l2-common.h> 30 + #include <media/v4l2-chip-ident.h> 30 31 #include <media/upd64031a.h> 31 32 32 33 // --------------------- read registers functions define ----------------------- ··· 179 178 break; 180 179 } 181 180 #endif 181 + 182 + case VIDIOC_G_CHIP_IDENT: 183 + return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_UPD64031A, 0); 182 184 183 185 default: 184 186 break;
+5
drivers/media/video/upd64083.c
··· 26 26 #include <linux/i2c.h> 27 27 #include <linux/videodev2.h> 28 28 #include <media/v4l2-common.h> 29 + #include <media/v4l2-chip-ident.h> 29 30 #include <media/upd64083.h> 30 31 31 32 MODULE_DESCRIPTION("uPD64083 driver"); ··· 156 155 break; 157 156 } 158 157 #endif 158 + 159 + case VIDIOC_G_CHIP_IDENT: 160 + return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_UPD64083, 0); 161 + 159 162 default: 160 163 break; 161 164 }
+4
drivers/media/video/wm8739.c
··· 29 29 #include <linux/i2c-id.h> 30 30 #include <linux/videodev.h> 31 31 #include <media/v4l2-common.h> 32 + #include <media/v4l2-chip-ident.h> 32 33 33 34 MODULE_DESCRIPTION("wm8739 driver"); 34 35 MODULE_AUTHOR("T. Adachi, Hans Verkuil"); ··· 236 235 } 237 236 return -EINVAL; 238 237 } 238 + 239 + case VIDIOC_G_CHIP_IDENT: 240 + return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_WM8739, 0); 239 241 240 242 case VIDIOC_LOG_STATUS: 241 243 v4l_info(client, "Frequency: %u Hz\n", state->clock_freq);
+4
drivers/media/video/wm8775.c
··· 33 33 #include <linux/i2c-id.h> 34 34 #include <linux/videodev.h> 35 35 #include <media/v4l2-common.h> 36 + #include <media/v4l2-chip-ident.h> 36 37 37 38 MODULE_DESCRIPTION("wm8775 driver"); 38 39 MODULE_AUTHOR("Ulf Eklund, Hans Verkuil"); ··· 124 123 if (!state->muted) 125 124 wm8775_write(client, R21, 0x100 + state->input); 126 125 break; 126 + 127 + case VIDIOC_G_CHIP_IDENT: 128 + return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_WM8775, 0); 127 129 128 130 case VIDIOC_LOG_STATUS: 129 131 v4l_info(client, "Input: %d%s\n", state->input,
+87 -4
include/media/v4l2-chip-ident.h
··· 31 31 V4L2_IDENT_AMBIGUOUS = 1, /* Match too general, multiple chips matched */ 32 32 V4L2_IDENT_UNKNOWN = 2, /* Chip found, but cannot identify */ 33 33 34 - /* module saa7110: just ident= 100 */ 34 + /* module tvaudio: reserved range 50-99 */ 35 + V4L2_IDENT_TVAUDIO = 50, /* A tvaudio chip, unknown which it is exactly */ 36 + 37 + /* module saa7110: just ident 100 */ 35 38 V4L2_IDENT_SAA7110 = 100, 36 39 37 - /* module saa7111: just ident= 101 */ 40 + /* module saa7111: just ident 101 */ 38 41 V4L2_IDENT_SAA7111 = 101, 39 42 40 43 /* module saa7115: reserved range 102-149 */ ··· 58 55 V4L2_IDENT_CX25842 = 242, 59 56 V4L2_IDENT_CX25843 = 243, 60 57 61 - /* OmniVision sensors - range 250-299 */ 58 + /* OmniVision sensors: reserved range 250-299 */ 62 59 V4L2_IDENT_OV7670 = 250, 63 60 64 - /* Conexant MPEG encoder/decoders: range 410-420 */ 61 + /* Conexant MPEG encoder/decoders: reserved range 410-420 */ 65 62 V4L2_IDENT_CX23415 = 415, 66 63 V4L2_IDENT_CX23416 = 416, 64 + 65 + /* module wm8739: just ident 8739 */ 66 + V4L2_IDENT_WM8739 = 8739, 67 + 68 + /* module wm8775: just ident 8775 */ 69 + V4L2_IDENT_WM8775 = 8775, 70 + 71 + /* module cs53132a: just ident 53132 */ 72 + V4L2_IDENT_CS53l32A = 53132, 73 + 74 + /* module upd64031a: just ident 64031 */ 75 + V4L2_IDENT_UPD64031A = 64031, 76 + 77 + /* module upd64083: just ident 64083 */ 78 + V4L2_IDENT_UPD64083 = 64083, 79 + 80 + /* module msp34xx: reserved range 34000-34999 */ 81 + V4L2_IDENT_MSP3400B = 34002, 82 + V4L2_IDENT_MSP3410B = 34102, 83 + 84 + V4L2_IDENT_MSP3400C = 34003, 85 + V4L2_IDENT_MSP3410C = 34103, 86 + 87 + V4L2_IDENT_MSP3400D = 34004, 88 + V4L2_IDENT_MSP3410D = 34104, 89 + V4L2_IDENT_MSP3405D = 34054, 90 + V4L2_IDENT_MSP3415D = 34154, 91 + V4L2_IDENT_MSP3407D = 34074, 92 + V4L2_IDENT_MSP3417D = 34174, 93 + 94 + V4L2_IDENT_MSP3400G = 34007, 95 + V4L2_IDENT_MSP3410G = 34107, 96 + V4L2_IDENT_MSP3420G = 34207, 97 + V4L2_IDENT_MSP3430G = 34307, 98 + V4L2_IDENT_MSP3440G = 34407, 99 + V4L2_IDENT_MSP3450G = 34507, 100 + V4L2_IDENT_MSP3460G = 34607, 101 + 102 + V4L2_IDENT_MSP3401G = 34017, 103 + V4L2_IDENT_MSP3411G = 34117, 104 + V4L2_IDENT_MSP3421G = 34217, 105 + V4L2_IDENT_MSP3431G = 34317, 106 + V4L2_IDENT_MSP3441G = 34417, 107 + V4L2_IDENT_MSP3451G = 34517, 108 + V4L2_IDENT_MSP3461G = 34617, 109 + 110 + V4L2_IDENT_MSP3402G = 34027, 111 + V4L2_IDENT_MSP3412G = 34127, 112 + V4L2_IDENT_MSP3422G = 34227, 113 + V4L2_IDENT_MSP3442G = 34427, 114 + V4L2_IDENT_MSP3452G = 34527, 115 + 116 + V4L2_IDENT_MSP3405G = 34057, 117 + V4L2_IDENT_MSP3415G = 34157, 118 + V4L2_IDENT_MSP3425G = 34257, 119 + V4L2_IDENT_MSP3435G = 34357, 120 + V4L2_IDENT_MSP3445G = 34457, 121 + V4L2_IDENT_MSP3455G = 34557, 122 + V4L2_IDENT_MSP3465G = 34657, 123 + 124 + V4L2_IDENT_MSP3407G = 34077, 125 + V4L2_IDENT_MSP3417G = 34177, 126 + V4L2_IDENT_MSP3427G = 34277, 127 + V4L2_IDENT_MSP3437G = 34377, 128 + V4L2_IDENT_MSP3447G = 34477, 129 + V4L2_IDENT_MSP3457G = 34577, 130 + V4L2_IDENT_MSP3467G = 34677, 131 + 132 + /* module msp44xx: reserved range 44000-44999 */ 133 + V4L2_IDENT_MSP4400G = 44007, 134 + V4L2_IDENT_MSP4410G = 44107, 135 + V4L2_IDENT_MSP4420G = 44207, 136 + V4L2_IDENT_MSP4440G = 44407, 137 + V4L2_IDENT_MSP4450G = 44507, 138 + 139 + V4L2_IDENT_MSP4408G = 44087, 140 + V4L2_IDENT_MSP4418G = 44187, 141 + V4L2_IDENT_MSP4428G = 44287, 142 + V4L2_IDENT_MSP4448G = 44487, 143 + V4L2_IDENT_MSP4458G = 44587, 67 144 }; 68 145 69 146 #endif