aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Isely <isely@pobox.com>2012-02-20 00:39:22 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-05-07 15:57:05 -0400
commitc0bb609fdc0b842799d5108aec7fae13b0fd32cd (patch)
tree0bb9b2a338e5f9ccfed99ae7a79a41f78c93616e
parent598e978aadd39e24749e0da5a6cff568570b1d00 (diff)
[media] pvrusb2: Get rid of obsolete code for video standard enumeration
Get rid of pvrusb2-local implementation for enumeration of video standards - with video_ioctl2 this happens automatically now in the v4l core. Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h3
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-hdw.c160
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-hdw.h5
3 files changed, 2 insertions, 166 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h b/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
index 5710d7f152c2..036952f2a3cb 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
@@ -317,15 +317,12 @@ struct pvr2_hdw {
317 v4l2_std_id std_mask_eeprom; // Hardware supported selections 317 v4l2_std_id std_mask_eeprom; // Hardware supported selections
318 v4l2_std_id std_mask_avail; // Which standards we may select from 318 v4l2_std_id std_mask_avail; // Which standards we may select from
319 v4l2_std_id std_mask_cur; // Currently selected standard(s) 319 v4l2_std_id std_mask_cur; // Currently selected standard(s)
320 unsigned int std_enum_cnt; // # of enumerated standards
321 int std_enum_cur; // selected standard enumeration value 320 int std_enum_cur; // selected standard enumeration value
322 int std_dirty; // True if std_mask_cur has changed 321 int std_dirty; // True if std_mask_cur has changed
323 struct pvr2_ctl_info std_info_enum; 322 struct pvr2_ctl_info std_info_enum;
324 struct pvr2_ctl_info std_info_avail; 323 struct pvr2_ctl_info std_info_avail;
325 struct pvr2_ctl_info std_info_cur; 324 struct pvr2_ctl_info std_info_cur;
326 struct pvr2_ctl_info std_info_detect; 325 struct pvr2_ctl_info std_info_detect;
327 struct v4l2_standard *std_defs;
328 const char **std_enum_names;
329 326
330 // Generated string names, one per actual V4L2 standard 327 // Generated string names, one per actual V4L2 standard
331 const char *std_mask_ptrs[32]; 328 const char *std_mask_ptrs[32];
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index c4bb0d1b5f9f..d882c95c5788 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -334,8 +334,6 @@ static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
334static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl); 334static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
335static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw); 335static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
336static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw); 336static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
337static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
338static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
339static void pvr2_hdw_quiescent_timeout(unsigned long); 337static void pvr2_hdw_quiescent_timeout(unsigned long);
340static void pvr2_hdw_decoder_stabilization_timeout(unsigned long); 338static void pvr2_hdw_decoder_stabilization_timeout(unsigned long);
341static void pvr2_hdw_encoder_wait_timeout(unsigned long); 339static void pvr2_hdw_encoder_wait_timeout(unsigned long);
@@ -860,8 +858,7 @@ static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
860 ns = (ns & ~m) | (v & m); 858 ns = (ns & ~m) | (v & m);
861 if (ns == hdw->std_mask_avail) return 0; 859 if (ns == hdw->std_mask_avail) return 0;
862 hdw->std_mask_avail = ns; 860 hdw->std_mask_avail = ns;
863 pvr2_hdw_internal_set_std_avail(hdw); 861 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
864 pvr2_hdw_internal_find_stdenum(hdw);
865 return 0; 862 return 0;
866} 863}
867 864
@@ -901,7 +898,6 @@ static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
901 if (ns == hdw->std_mask_cur) return 0; 898 if (ns == hdw->std_mask_cur) return 0;
902 hdw->std_mask_cur = ns; 899 hdw->std_mask_cur = ns;
903 hdw->std_dirty = !0; 900 hdw->std_dirty = !0;
904 pvr2_hdw_internal_find_stdenum(hdw);
905 return 0; 901 return 0;
906} 902}
907 903
@@ -947,40 +943,6 @@ static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
947} 943}
948 944
949 945
950static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
951{
952 struct pvr2_hdw *hdw = cptr->hdw;
953 if (v < 0) return -EINVAL;
954 if (v > hdw->std_enum_cnt) return -EINVAL;
955 hdw->std_enum_cur = v;
956 if (!v) return 0;
957 v--;
958 if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
959 hdw->std_mask_cur = hdw->std_defs[v].id;
960 hdw->std_dirty = !0;
961 return 0;
962}
963
964
965static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
966{
967 *vp = cptr->hdw->std_enum_cur;
968 return 0;
969}
970
971
972static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
973{
974 return cptr->hdw->std_dirty != 0;
975}
976
977
978static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
979{
980 cptr->hdw->std_dirty = 0;
981}
982
983
984#define DEFINT(vmin,vmax) \ 946#define DEFINT(vmin,vmax) \
985 .type = pvr2_ctl_int, \ 947 .type = pvr2_ctl_int, \
986 .def.type_int.min_value = vmin, \ 948 .def.type_int.min_value = vmin, \
@@ -1299,16 +1261,6 @@ static const struct pvr2_ctl_info control_defs[] = {
1299 .sym_to_val = ctrl_std_sym_to_val, 1261 .sym_to_val = ctrl_std_sym_to_val,
1300 .type = pvr2_ctl_bitmask, 1262 .type = pvr2_ctl_bitmask,
1301 },{ 1263 },{
1302 .desc = "Video Standard Name",
1303 .name = "video_standard",
1304 .internal_id = PVR2_CID_STDENUM,
1305 .skip_init = !0,
1306 .get_value = ctrl_stdenumcur_get,
1307 .set_value = ctrl_stdenumcur_set,
1308 .is_dirty = ctrl_stdenumcur_is_dirty,
1309 .clear_dirty = ctrl_stdenumcur_clear_dirty,
1310 .type = pvr2_ctl_enum,
1311 },{
1312 .desc = "Video Standards Detected Mask", 1264 .desc = "Video Standards Detected Mask",
1313 .name = "video_standard_mask_detected", 1265 .name = "video_standard_mask_detected",
1314 .internal_id = PVR2_CID_STDDETECT, 1266 .internal_id = PVR2_CID_STDDETECT,
@@ -1951,7 +1903,7 @@ static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1951 hdw->std_mask_avail |= std2; 1903 hdw->std_mask_avail |= std2;
1952 } 1904 }
1953 1905
1954 pvr2_hdw_internal_set_std_avail(hdw); 1906 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
1955 1907
1956 if (std1) { 1908 if (std1) {
1957 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1); 1909 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
@@ -1960,7 +1912,6 @@ static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1960 bcnt,buf); 1912 bcnt,buf);
1961 hdw->std_mask_cur = std1; 1913 hdw->std_mask_cur = std1;
1962 hdw->std_dirty = !0; 1914 hdw->std_dirty = !0;
1963 pvr2_hdw_internal_find_stdenum(hdw);
1964 return; 1915 return;
1965 } 1916 }
1966 if (std3) { 1917 if (std3) {
@@ -1970,7 +1921,6 @@ static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1970 " (determined by device type): %.*s",bcnt,buf); 1921 " (determined by device type): %.*s",bcnt,buf);
1971 hdw->std_mask_cur = std3; 1922 hdw->std_mask_cur = std3;
1972 hdw->std_dirty = !0; 1923 hdw->std_dirty = !0;
1973 pvr2_hdw_internal_find_stdenum(hdw);
1974 return; 1924 return;
1975 } 1925 }
1976 1926
@@ -1990,24 +1940,10 @@ static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1990 bcnt,buf); 1940 bcnt,buf);
1991 hdw->std_mask_cur = std_eeprom_maps[idx].std; 1941 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1992 hdw->std_dirty = !0; 1942 hdw->std_dirty = !0;
1993 pvr2_hdw_internal_find_stdenum(hdw);
1994 return; 1943 return;
1995 } 1944 }
1996 } 1945 }
1997 1946
1998 if (hdw->std_enum_cnt > 1) {
1999 // Autoselect the first listed standard
2000 hdw->std_enum_cur = 1;
2001 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
2002 hdw->std_dirty = !0;
2003 pvr2_trace(PVR2_TRACE_STD,
2004 "Initial video standard auto-selected to %s",
2005 hdw->std_defs[hdw->std_enum_cur-1].name);
2006 return;
2007 }
2008
2009 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2010 "Unable to select a viable initial video standard");
2011} 1947}
2012 1948
2013 1949
@@ -2609,14 +2545,6 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2609 cptr->info = ciptr; 2545 cptr->info = ciptr;
2610 } 2546 }
2611 2547
2612 // Initialize video standard enum dynamic control
2613 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
2614 if (cptr) {
2615 memcpy(&hdw->std_info_enum,cptr->info,
2616 sizeof(hdw->std_info_enum));
2617 cptr->info = &hdw->std_info_enum;
2618
2619 }
2620 // Initialize control data regarding video standard masks 2548 // Initialize control data regarding video standard masks
2621 valid_std_mask = pvr2_std_get_usable(); 2549 valid_std_mask = pvr2_std_get_usable();
2622 for (idx = 0; idx < 32; idx++) { 2550 for (idx = 0; idx < 32; idx++) {
@@ -2736,8 +2664,6 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2736 kfree(hdw->ctl_write_buffer); 2664 kfree(hdw->ctl_write_buffer);
2737 kfree(hdw->controls); 2665 kfree(hdw->controls);
2738 kfree(hdw->mpeg_ctrl_info); 2666 kfree(hdw->mpeg_ctrl_info);
2739 kfree(hdw->std_defs);
2740 kfree(hdw->std_enum_names);
2741 kfree(hdw); 2667 kfree(hdw);
2742 } 2668 }
2743 return NULL; 2669 return NULL;
@@ -2813,8 +2739,6 @@ void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2813 } while (0); mutex_unlock(&pvr2_unit_mtx); 2739 } while (0); mutex_unlock(&pvr2_unit_mtx);
2814 kfree(hdw->controls); 2740 kfree(hdw->controls);
2815 kfree(hdw->mpeg_ctrl_info); 2741 kfree(hdw->mpeg_ctrl_info);
2816 kfree(hdw->std_defs);
2817 kfree(hdw->std_enum_names);
2818 kfree(hdw); 2742 kfree(hdw);
2819} 2743}
2820 2744
@@ -2837,86 +2761,6 @@ void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2837} 2761}
2838 2762
2839 2763
2840// Attempt to autoselect an appropriate value for std_enum_cur given
2841// whatever is currently in std_mask_cur
2842static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2843{
2844 unsigned int idx;
2845 for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2846 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2847 hdw->std_enum_cur = idx;
2848 return;
2849 }
2850 }
2851 hdw->std_enum_cur = 0;
2852}
2853
2854
2855// Calculate correct set of enumerated standards based on currently known
2856// set of available standards bits.
2857static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2858{
2859 struct v4l2_standard *newstd;
2860 unsigned int std_cnt;
2861 unsigned int idx;
2862
2863 newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2864
2865 if (hdw->std_defs) {
2866 kfree(hdw->std_defs);
2867 hdw->std_defs = NULL;
2868 }
2869 hdw->std_enum_cnt = 0;
2870 if (hdw->std_enum_names) {
2871 kfree(hdw->std_enum_names);
2872 hdw->std_enum_names = NULL;
2873 }
2874
2875 if (!std_cnt) {
2876 pvr2_trace(
2877 PVR2_TRACE_ERROR_LEGS,
2878 "WARNING: Failed to identify any viable standards");
2879 }
2880
2881 /* Set up the dynamic control for this standard */
2882 hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2883 if (hdw->std_enum_names) {
2884 hdw->std_enum_names[0] = "none";
2885 for (idx = 0; idx < std_cnt; idx++)
2886 hdw->std_enum_names[idx+1] = newstd[idx].name;
2887 hdw->std_info_enum.def.type_enum.value_names =
2888 hdw->std_enum_names;
2889 hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2890 } else {
2891 pvr2_trace(
2892 PVR2_TRACE_ERROR_LEGS,
2893 "WARNING: Failed to alloc memory for names");
2894 hdw->std_info_enum.def.type_enum.value_names = NULL;
2895 hdw->std_info_enum.def.type_enum.count = 0;
2896 }
2897 hdw->std_defs = newstd;
2898 hdw->std_enum_cnt = std_cnt+1;
2899 hdw->std_enum_cur = 0;
2900 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2901}
2902
2903
2904int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2905 struct v4l2_standard *std,
2906 unsigned int idx)
2907{
2908 int ret = -EINVAL;
2909 if (!idx) return ret;
2910 LOCK_TAKE(hdw->big_lock); do {
2911 if (idx >= hdw->std_enum_cnt) break;
2912 idx--;
2913 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2914 ret = 0;
2915 } while (0); LOCK_GIVE(hdw->big_lock);
2916 return ret;
2917}
2918
2919
2920/* Get the number of defined controls */ 2764/* Get the number of defined controls */
2921unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw) 2765unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2922{ 2766{
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.h b/drivers/media/video/pvrusb2/pvrusb2-hdw.h
index 45ddb81475b7..8060fc666eeb 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.h
@@ -28,7 +28,6 @@
28 28
29/* Private internal control ids, look these up with 29/* Private internal control ids, look these up with
30 pvr2_hdw_get_ctrl_by_id() - these are NOT visible in V4L */ 30 pvr2_hdw_get_ctrl_by_id() - these are NOT visible in V4L */
31#define PVR2_CID_STDENUM 1
32#define PVR2_CID_STDCUR 2 31#define PVR2_CID_STDCUR 2
33#define PVR2_CID_STDAVAIL 3 32#define PVR2_CID_STDAVAIL 3
34#define PVR2_CID_INPUT 4 33#define PVR2_CID_INPUT 4
@@ -211,10 +210,6 @@ int pvr2_hdw_set_stream_type(struct pvr2_hdw *, enum pvr2_config);
211/* Get handle to video output stream */ 210/* Get handle to video output stream */
212struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *); 211struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *);
213 212
214/* Emit a video standard struct */
215int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,struct v4l2_standard *std,
216 unsigned int idx);
217
218/* Enable / disable retrieval of CPU firmware or prom contents. This must 213/* Enable / disable retrieval of CPU firmware or prom contents. This must
219 be enabled before pvr2_hdw_cpufw_get() will function. Note that doing 214 be enabled before pvr2_hdw_cpufw_get() will function. Note that doing
220 this may prevent the device from running (and leaving this mode may 215 this may prevent the device from running (and leaving this mode may