44 * validate the existing APIs in the media subsystem. It can also aid
55 * developers working on userspace applications.
66 *
7- * When this module is loaded, it will attempt to modprobe 'dvb_vidtv_tuner' and 'dvb_vidtv_demod'.
7+ * When this module is loaded, it will attempt to modprobe 'dvb_vidtv_tuner'
8+ * and 'dvb_vidtv_demod'.
89 *
910 * Copyright (C) 2020 Daniel W. S. Almeida
1011 */
2425#include "vidtv_ts.h"
2526#include "vidtv_tuner.h"
2627
27- // #define MUX_BUF_MAX_SZ
28- // #define MUX_BUF_MIN_SZ
28+ #define MUX_BUF_MIN_SZ 90164
29+ #define MUX_BUF_MAX_SZ ( MUX_BUF_MIN_SZ * 10)
2930#define TUNER_DEFAULT_ADDR 0x68
3031#define DEMOD_DEFAULT_ADDR 0x60
3132#define VIDTV_DEFAULT_NETWORK_ID 0x744
3233#define VIDTV_DEFAULT_NETWORK_NAME "LinuxTV.org"
3334
34- /* LNBf fake parameters: ranges used by an Universal (extended) European LNBf */
35- #define LNB_CUT_FREQUENCY 11700000
36- #define LNB_LOW_FREQ 9750000
37- #define LNB_HIGH_FREQ 10600000
38-
35+ /*
36+ * The LNBf fake parameters here are the ranges used by an
37+ * Universal (extended) European LNBf, which is likely the most common LNBf
38+ * found on Satellite digital TV system nowadays.
39+ */
40+ #define LNB_CUT_FREQUENCY 11700000 /* high IF frequency */
41+ #define LNB_LOW_FREQ 9750000 /* low IF frequency */
42+ #define LNB_HIGH_FREQ 10600000 /* transition frequency */
3943
4044static unsigned int drop_tslock_prob_on_low_snr ;
4145module_param (drop_tslock_prob_on_low_snr , uint , 0 );
@@ -94,7 +98,8 @@ MODULE_PARM_DESC(si_period_msec, "How often to send SI packets. Default: 40ms");
9498
9599static unsigned int pcr_period_msec = 40 ;
96100module_param (pcr_period_msec , uint , 0 );
97- MODULE_PARM_DESC (pcr_period_msec , "How often to send PCR packets. Default: 40ms" );
101+ MODULE_PARM_DESC (pcr_period_msec ,
102+ "How often to send PCR packets. Default: 40ms" );
98103
99104static unsigned int mux_rate_kbytes_sec = 4096 ;
100105module_param (mux_rate_kbytes_sec , uint , 0 );
@@ -106,16 +111,14 @@ MODULE_PARM_DESC(pcr_pid, "PCR PID for all channels: defaults to 0x200");
106111
107112static unsigned int mux_buf_sz_pkts ;
108113module_param (mux_buf_sz_pkts , uint , 0 );
109- MODULE_PARM_DESC (mux_buf_sz_pkts , "Size for the internal mux buffer in multiples of 188 bytes" );
110-
111- #define MUX_BUF_MIN_SZ 90164
112- #define MUX_BUF_MAX_SZ (MUX_BUF_MIN_SZ * 10)
114+ MODULE_PARM_DESC (mux_buf_sz_pkts ,
115+ "Size for the internal mux buffer in multiples of 188 bytes" );
113116
114117static u32 vidtv_bridge_mux_buf_sz_for_mux_rate (void )
115118{
116119 u32 max_elapsed_time_msecs = VIDTV_MAX_SLEEP_USECS / USEC_PER_MSEC ;
117- u32 nbytes_expected ;
118120 u32 mux_buf_sz = mux_buf_sz_pkts * TS_PACKET_LEN ;
121+ u32 nbytes_expected ;
119122
120123 nbytes_expected = mux_rate_kbytes_sec ;
121124 nbytes_expected *= max_elapsed_time_msecs ;
@@ -145,14 +148,12 @@ static bool vidtv_bridge_check_demod_lock(struct vidtv_dvb *dvb, u32 n)
145148 FE_HAS_LOCK );
146149}
147150
148- static void
149- vidtv_bridge_on_new_pkts_avail (void * priv , u8 * buf , u32 npkts )
151+ /*
152+ * called on a separate thread by the mux when new packets become available
153+ */
154+ static void vidtv_bridge_on_new_pkts_avail (void * priv , u8 * buf , u32 npkts )
150155{
151- /*
152- * called on a separate thread by the mux when new packets become
153- * available
154- */
155- struct vidtv_dvb * dvb = (struct vidtv_dvb * )priv ;
156+ struct vidtv_dvb * dvb = priv ;
156157
157158 /* drop packets if we lose the lock */
158159 if (vidtv_bridge_check_demod_lock (dvb , 0 ))
@@ -180,8 +181,10 @@ static int vidtv_start_streaming(struct vidtv_dvb *dvb)
180181 return 0 ;
181182 }
182183
183- mux_buf_sz = (mux_buf_sz_pkts ) ? mux_buf_sz_pkts :
184- vidtv_bridge_mux_buf_sz_for_mux_rate ();
184+ if (mux_buf_sz_pkts )
185+ mux_buf_sz = mux_buf_sz_pkts ;
186+ else
187+ mux_buf_sz = vidtv_bridge_mux_buf_sz_for_mux_rate ();
185188
186189 mux_args .mux_buf_sz = mux_buf_sz ;
187190
@@ -212,8 +215,8 @@ static int vidtv_start_feed(struct dvb_demux_feed *feed)
212215{
213216 struct dvb_demux * demux = feed -> demux ;
214217 struct vidtv_dvb * dvb = demux -> priv ;
215- int rc ;
216218 int ret ;
219+ int rc ;
217220
218221 if (!demux -> dmx .frontend )
219222 return - EINVAL ;
@@ -251,16 +254,21 @@ static int vidtv_stop_feed(struct dvb_demux_feed *feed)
251254
252255static struct dvb_frontend * vidtv_get_frontend_ptr (struct i2c_client * c )
253256{
254- /* the demod will set this when its probe function runs */
255257 struct vidtv_demod_state * state = i2c_get_clientdata (c );
256258
259+ /* the demod will set this when its probe function runs */
257260 return & state -> frontend ;
258261}
259262
260263static int vidtv_master_xfer (struct i2c_adapter * i2c_adap ,
261264 struct i2c_msg msgs [],
262265 int num )
263266{
267+ /*
268+ * Right now, this virtual driver doesn't really send or receive
269+ * messages from I2C. A real driver will require an implementation
270+ * here.
271+ */
264272 return 0 ;
265273}
266274
@@ -328,11 +336,10 @@ static int vidtv_bridge_dmxdev_init(struct vidtv_dvb *dvb)
328336
329337static int vidtv_bridge_probe_demod (struct vidtv_dvb * dvb , u32 n )
330338{
331- struct vidtv_demod_config cfg = {};
332-
333- cfg .drop_tslock_prob_on_low_snr = drop_tslock_prob_on_low_snr ;
334- cfg .recover_tslock_prob_on_good_snr = recover_tslock_prob_on_good_snr ;
335-
339+ struct vidtv_demod_config cfg = {
340+ .drop_tslock_prob_on_low_snr = drop_tslock_prob_on_low_snr ,
341+ .recover_tslock_prob_on_good_snr = recover_tslock_prob_on_good_snr ,
342+ };
336343 dvb -> i2c_client_demod [n ] = dvb_module_probe ("dvb_vidtv_demod" ,
337344 NULL ,
338345 & dvb -> i2c_adapter ,
@@ -351,14 +358,14 @@ static int vidtv_bridge_probe_demod(struct vidtv_dvb *dvb, u32 n)
351358
352359static int vidtv_bridge_probe_tuner (struct vidtv_dvb * dvb , u32 n )
353360{
354- struct vidtv_tuner_config cfg = {};
361+ struct vidtv_tuner_config cfg = {
362+ .fe = dvb -> fe [n ],
363+ .mock_power_up_delay_msec = mock_power_up_delay_msec ,
364+ .mock_tune_delay_msec = mock_tune_delay_msec ,
365+ };
355366 u32 freq ;
356367 int i ;
357368
358- cfg .fe = dvb -> fe [n ];
359- cfg .mock_power_up_delay_msec = mock_power_up_delay_msec ;
360- cfg .mock_tune_delay_msec = mock_tune_delay_msec ;
361-
362369 /* TODO: check if the frequencies are at a valid range */
363370
364371 memcpy (cfg .vidtv_valid_dvb_t_freqs ,
@@ -397,9 +404,7 @@ static int vidtv_bridge_probe_tuner(struct vidtv_dvb *dvb, u32 n)
397404
398405static int vidtv_bridge_dvb_init (struct vidtv_dvb * dvb )
399406{
400- int ret ;
401- int i ;
402- int j ;
407+ int ret , i , j ;
403408
404409 ret = vidtv_bridge_i2c_register_adap (dvb );
405410 if (ret < 0 )
0 commit comments