diff options
author | Tomasz Maciej Nowak | 2017-02-02 21:53:58 +0100 |
---|---|---|
committer | Tomasz Maciej Nowak | 2017-02-02 21:53:58 +0100 |
commit | 0568c76543ae09a74e87c5ea231fe3160d01c488 (patch) | |
tree | 3c6bb31469f9fbb279eff24f4bd8da6ad71db05b | |
download | aur-0568c76543ae09a74e87c5ea231fe3160d01c488.tar.gz |
Initial commit
-rw-r--r-- | .SRCINFO | 35 | ||||
-rw-r--r-- | 93-vtunerc.rules | 1 | ||||
-rw-r--r-- | PKGBUILD | 34 | ||||
-rw-r--r-- | dkms.conf | 18 | ||||
-rw-r--r-- | kernel-3.10.patch | 154 | ||||
-rw-r--r-- | kernel-4.2.patch | 39 | ||||
-rw-r--r-- | kernel-4.6.patch | 15 | ||||
-rw-r--r-- | tweaks.patch | 144 |
8 files changed, 440 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..e02d822c3619 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,35 @@ +# Generated by mksrcinfo v8 +# Thu Feb 2 20:48:19 UTC 2017 +pkgbase = vtunerc-dkms + pkgdesc = VTuner client kernel module for virtual DVB's + pkgver = 1.4 + pkgrel = 1 + url = http://code.google.com/p/vtuner/ + arch = x86_64 + arch = i686 + arch = arm + arch = armv6h + arch = armv7h + arch = aarch64 + license = GPL2 + depends = linux>=3.3 + depends = dkms + conflicts = vtuner-module + conflicts = vtuner-module-lts + source = vtuner.linux-driver-rel1.4.tar.gz::https://github.com/lecotex/vtuner.linux-driver/archive/rel1.4.tar.gz + source = kernel-3.10.patch + source = kernel-4.2.patch + source = kernel-4.6.patch + source = tweaks.patch + source = 93-vtunerc.rules + source = dkms.conf + sha256sums = c6ba0cfd808e3f8473a5ea25d4ac2871b826edc62de5f3624c0bd812aad63bc1 + sha256sums = caf2b8c5c4bf7808da4c48fa272f1706e0ca1ca4db84a08d9d2373e6e38e7812 + sha256sums = ab7f8c73aa578e4bc0a7cf58c112115cb6f215eb0a7f013773d6d4a50730d527 + sha256sums = 6c634f32b245cfc097e45b426515a1d8f5c892a60a9f9e442540d6b3a2489042 + sha256sums = bd5d9b0659fb8a2d8555adc7f60bcf2915f29244402a744aac9e10b1a50adb8c + sha256sums = 4b2d860cac8c8bab2d8fa79760d4405bef6fd042f4e78b680d25d1a5ebcbf83d + sha256sums = d2e90a5d2da394c9ffe4ab796383d6cdd7304e926ad095b7dad6fec4a23efd5d + +pkgname = vtunerc-dkms + diff --git a/93-vtunerc.rules b/93-vtunerc.rules new file mode 100644 index 000000000000..6c227a287167 --- /dev/null +++ b/93-vtunerc.rules @@ -0,0 +1 @@ +ACTION=="add", KERNEL=="vtunerc*", SUBSYSTEMS=="dvb", MODE="0660", GROUP="video" diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..e7ba93dd3d4a --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Tomasz Maciej Nowak <com[dot]gmail[at]tmn505> +pkgname='vtunerc-dkms' +pkgdesc="VTuner client kernel module for virtual DVB's" +pkgver=1.4 +pkgrel=1 +arch=('x86_64' 'i686' 'arm' 'armv6h' 'armv7h' 'aarch64') +url="http://code.google.com/p/vtuner/" +license=('GPL2') +depends=('linux>=3.3' 'dkms') +conflicts=('vtuner-module' 'vtuner-module-lts') +source=("vtuner.linux-driver-rel${pkgver}.tar.gz::https://github.com/lecotex/vtuner.linux-driver/archive/rel${pkgver}.tar.gz" + 'kernel-3.10.patch' + 'kernel-4.2.patch' + 'kernel-4.6.patch' + 'tweaks.patch' + '93-vtunerc.rules' + 'dkms.conf') +sha256sums=('c6ba0cfd808e3f8473a5ea25d4ac2871b826edc62de5f3624c0bd812aad63bc1' + 'caf2b8c5c4bf7808da4c48fa272f1706e0ca1ca4db84a08d9d2373e6e38e7812' + 'ab7f8c73aa578e4bc0a7cf58c112115cb6f215eb0a7f013773d6d4a50730d527' + '6c634f32b245cfc097e45b426515a1d8f5c892a60a9f9e442540d6b3a2489042' + 'bd5d9b0659fb8a2d8555adc7f60bcf2915f29244402a744aac9e10b1a50adb8c' + '4b2d860cac8c8bab2d8fa79760d4405bef6fd042f4e78b680d25d1a5ebcbf83d' + 'd2e90a5d2da394c9ffe4ab796383d6cdd7304e926ad095b7dad6fec4a23efd5d') + +package() { + install -dm755 ${pkgdir}/usr/src/vtunerc-${pkgver}/patches + cp \ + ${srcdir}/vtuner.linux-driver-rel${pkgver}/* \ + ${srcdir}/dkms.conf \ + ${pkgdir}/usr/src/vtunerc-${pkgver} + cp ${srcdir}/*.patch ${pkgdir}/usr/src/vtunerc-${pkgver}/patches + install -Dm644 ${srcdir}/93-vtunerc.rules ${pkgdir}/usr/lib/udev/rules.d/93-vtunerc.rules +} diff --git a/dkms.conf b/dkms.conf new file mode 100644 index 000000000000..4e674bf39dde --- /dev/null +++ b/dkms.conf @@ -0,0 +1,18 @@ +PACKAGE_NAME="vtunerc" +PACKAGE_VERSION="1.4" +AUTOINSTALL="yes" + +BUILT_MODULE_NAME[0]="vtunerc" +MAKE[0]="make KDIR=/usr/lib/modules/$kernelver/build VTUNERC_MAX_ADAPTERS=8" +DEST_MODULE_LOCATION[0]="/kernel/drivers/media" + +PATCH[0]="tweaks.patch" + +PATCH[1]="kernel-3.10.patch" +PATCH_MATCH[1]="(3\.1[0-9]\.(.*)|4.*)" + +PATCH[2]="kernel-4.2.patch" +PATCH_MATCH[2]="(4\.[2-9](.*)|4\.[0-9][0-9]\.(.*))" + +PATCH[3]="kernel-4.6.patch" +PATCH_MATCH[3]="(4\.[6-9](.*)|4\.[0-9][0-9]\.(.*))" diff --git a/kernel-3.10.patch b/kernel-3.10.patch new file mode 100644 index 000000000000..df72c3a4defa --- /dev/null +++ b/kernel-3.10.patch @@ -0,0 +1,154 @@ +diff -uprNx '.*' vtuner.linux-driver-rel1.4.orig/vtunerc_main.c vtuner.linux-driver-rel1.4/vtunerc_main.c +--- vtuner.linux-driver-rel1.4.orig/vtunerc_main.c 2016-01-10 21:20:06.319074454 +0100 ++++ vtuner.linux-driver-rel1.4/vtunerc_main.c 2016-01-10 21:22:45.112413694 +0100 +@@ -22,6 +22,7 @@ + #include <linux/i2c.h> + #include <asm/uaccess.h> + #include <linux/delay.h> ++#include <linux/seq_file.h> + + #include "demux.h" + #include "dmxdev.h" +@@ -176,64 +177,53 @@ static char *get_fe_name(struct dvb_fron + return (feinfo && feinfo->name) ? feinfo->name : "(not set)"; + } + +-/** +- * @brief procfs file handler +- * @param buffer: +- * @param start: +- * @param offset: +- * @param size: +- * @param eof: +- * @param data: +- * @return =0: success <br/> +- * <0: if any error occur +- */ +-#define MAXBUF 512 +-int vtunerc_read_proc(char *buffer, char **start, off_t offset, int size, +- int *eof, void *data) +-{ +- char outbuf[MAXBUF] = "[ vtunerc driver, version " +- VTUNERC_MODULE_VERSION " ]\n"; +- int blen, i, pcnt; +- struct vtunerc_ctx *ctx = (struct vtunerc_ctx *)data; +- +- blen = strlen(outbuf); +- sprintf(outbuf+blen, " sessions: %u\n", ctx->stat_ctrl_sess); +- blen = strlen(outbuf); +- sprintf(outbuf+blen, " TS data : %u\n", ctx->stat_wr_data); +- blen = strlen(outbuf); +- sprintf(outbuf+blen, " PID tab :"); +- pcnt = 0; +- for (i = 0; i < MAX_PIDTAB_LEN; i++) { +- blen = strlen(outbuf); +- if (ctx->pidtab[i] != PID_UNKNOWN) { +- sprintf(outbuf+blen, " %x", ctx->pidtab[i]); ++static int vtunerc_read_proc(struct seq_file *seq, void *v) ++{ ++ int i, pcnt = 0; ++ struct vtunerc_ctx *ctx = (struct vtunerc_ctx *)seq->private; ++ seq_printf(seq, "[ vtunerc driver, version " ++ VTUNERC_MODULE_VERSION " ]\n"); ++ seq_printf(seq, " sessions: %u\n", ctx->stat_ctrl_sess); ++ seq_printf(seq, " TS data : %u\n", ctx->stat_wr_data); ++ seq_printf(seq, " PID tab :"); ++ for (i = 0; i < MAX_PIDTAB_LEN; i++) ++ if (ctx->pidtab[i] != PID_UNKNOWN) { ++ seq_printf(seq, " %x", ctx->pidtab[i]); + pcnt++; +- } +- } +- blen = strlen(outbuf); +- sprintf(outbuf+blen, " (len=%d)\n", pcnt); +- blen = strlen(outbuf); +- sprintf(outbuf+blen, " FE type : %s\n", get_fe_name(ctx->feinfo)); +- +- blen = strlen(outbuf); +- sprintf(outbuf+blen, " msg xchg: %d/%d\n", ctx->ctrldev_request.type, ctx->ctrldev_response.type); +- +- blen = strlen(outbuf); +- +- if (size < blen) +- return -EINVAL; +- +- if (offset != 0) +- return 0; +- +- strcpy(buffer, outbuf); +- +- /* signal EOF */ +- *eof = 1; ++ } ++ seq_printf(seq, " (len=%d)\n", pcnt); ++ seq_printf(seq, " FE type : %s\n", get_fe_name(ctx->feinfo)); ++ seq_printf(seq, " msg xchg: %d/%d\n", ctx->ctrldev_request.type, ctx->ctrldev_response.type); ++ return 0; ++} + +- return blen; ++static int vtunerc_proc_open(struct inode *inode, struct file *file) ++{ ++ int ret; ++ struct vtunerc_ctx *ctx = PDE_DATA(inode); ++ ++ if (!try_module_get(THIS_MODULE)) ++ return -ENODEV; ++ ret = single_open(file, vtunerc_read_proc, ctx); ++ if (ret) ++ module_put(THIS_MODULE); ++ return ret; ++} + ++static int vtuner_proc_release(struct inode *inode, struct file *file) ++{ ++ int ret = single_release(inode, file); ++ module_put(THIS_MODULE); ++ return ret; + } ++ ++static const struct file_operations vtunerc_read_proc_fops = { ++ .open = vtunerc_proc_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = vtuner_proc_release, ++ }; ++ + #endif + + static char *my_strdup(const char *s) +@@ -346,8 +336,8 @@ static int __init vtunerc_init(void) + sprintf(procfilename, VTUNERC_PROC_FILENAME, + ctx->idx); + ctx->procname = my_strdup(procfilename); +- if (create_proc_read_entry(ctx->procname, 0, NULL, +- vtunerc_read_proc, ++ if (proc_create_data(ctx->procname, 0, NULL, ++ &vtunerc_read_proc_fops, + ctx) == 0) + printk(KERN_WARNING + "vtunerc%d: Unable to register '%s' proc file\n", +diff -uprNx '.*' vtuner.linux-driver-rel1.4.orig/vtunerc_priv.h vtuner.linux-driver-rel1.4/vtunerc_priv.h +--- vtuner.linux-driver-rel1.4.orig/vtunerc_priv.h 2013-04-18 23:19:32.000000000 +0200 ++++ vtuner.linux-driver-rel1.4/vtunerc_priv.h 2016-01-10 21:22:05.879078901 +0100 +@@ -20,6 +20,7 @@ + #include <linux/module.h> /* Specifically, a module */ + #include <linux/kernel.h> /* We're doing kernel work */ + #include <linux/cdev.h> ++#include <linux/version.h> + + #include "demux.h" + #include "dmxdev.h" +@@ -108,4 +109,12 @@ if (ctx->config && (ctx->config->debug)) + printk(KERN_DEBUG "vtunerc%d: " fmt, ctx->idx, ##arg); \ + } while (0) + ++/* backward compatibility stuff */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) ++static inline void *PDE_DATA(const struct inode *inode) ++{ ++ return PROC_I(inode)->pde->data; ++} ++#endif ++ + #endif diff --git a/kernel-4.2.patch b/kernel-4.2.patch new file mode 100644 index 000000000000..24af5d2f6540 --- /dev/null +++ b/kernel-4.2.patch @@ -0,0 +1,39 @@ +diff -uprNx '.*' vtuner.linux-driver.orig/vtunerc_proxyfe.c vtuner.linux-driver/vtunerc_proxyfe.c +--- vtuner.linux-driver.orig/vtunerc_proxyfe.c 2016-01-10 03:06:52.000000000 +0100 ++++ vtuner.linux-driver/vtunerc_proxyfe.c 2016-01-10 12:55:53.141702168 +0100 +@@ -36,7 +36,7 @@ struct dvb_proxyfe_state { + }; + + +-static int dvb_proxyfe_read_status(struct dvb_frontend *fe, fe_status_t *status) ++static int dvb_proxyfe_read_status(struct dvb_frontend *fe, enum fe_status *status) + { + struct dvb_proxyfe_state *state = fe->demodulator_priv; + struct vtunerc_ctx *ctx = state->ctx; +@@ -254,7 +254,7 @@ static int dvb_proxyfe_init(struct dvb_f + return 0; + } + +-static int dvb_proxyfe_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) ++static int dvb_proxyfe_set_tone(struct dvb_frontend *fe, enum fe_sec_tone_mode tone) + { + struct dvb_proxyfe_state *state = fe->demodulator_priv; + struct vtunerc_ctx *ctx = state->ctx; +@@ -267,7 +267,7 @@ static int dvb_proxyfe_set_tone(struct d + return 0; + } + +-static int dvb_proxyfe_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) ++static int dvb_proxyfe_set_voltage(struct dvb_frontend *fe, enum fe_sec_voltage voltage) + { + struct dvb_proxyfe_state *state = fe->demodulator_priv; + struct vtunerc_ctx *ctx = state->ctx; +@@ -293,7 +293,7 @@ static int dvb_proxyfe_send_diseqc_msg(s + return 0; + } + +-static int dvb_proxyfe_send_diseqc_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t burst) ++static int dvb_proxyfe_send_diseqc_burst(struct dvb_frontend *fe, enum fe_sec_mini_cmd burst) + { + struct dvb_proxyfe_state *state = fe->demodulator_priv; + struct vtunerc_ctx *ctx = state->ctx; diff --git a/kernel-4.6.patch b/kernel-4.6.patch new file mode 100644 index 000000000000..afa3e551f0f4 --- /dev/null +++ b/kernel-4.6.patch @@ -0,0 +1,15 @@ +diff -uprNx '.*' vtuner.linux-driver-rel1.4.orig/vtunerc_proxyfe.c vtuner.linux-driver-rel1.4/vtunerc_proxyfe.c +--- vtuner.linux-driver-rel1.4.orig/vtunerc_proxyfe.c 2016-08-05 11:33:24.000000000 +0200 ++++ vtuner.linux-driver-rel1.4/vtunerc_proxyfe.c 2016-08-05 11:34:37.840983911 +0200 +@@ -107,9 +107,9 @@ static int dvb_proxyfe_read_ucblocks(str + return 0; + } + +-static int dvb_proxyfe_get_frontend(struct dvb_frontend *fe) ++static int dvb_proxyfe_get_frontend(struct dvb_frontend *fe, ++ struct dtv_frontend_properties *c) + { +- struct dtv_frontend_properties *c = &fe->dtv_property_cache; + struct dvb_proxyfe_state *state = fe->demodulator_priv; + struct vtunerc_ctx *ctx = state->ctx; + struct vtuner_message msg; diff --git a/tweaks.patch b/tweaks.patch new file mode 100644 index 000000000000..dfacb16434f9 --- /dev/null +++ b/tweaks.patch @@ -0,0 +1,144 @@ +diff -uprNx '.*' vtuner.linux-driver/vtunerc_ctrldev.c vtuner_tweak/vtunerc_ctrldev.c +--- vtuner.linux-driver/vtunerc_ctrldev.c 2015-03-27 16:20:00.000000000 +0100 ++++ vtuner_tweak/vtunerc_ctrldev.c 2015-05-10 02:19:42.000000000 +0200 +@@ -404,7 +411,7 @@ void vtunerc_unregister_ctrldev(struct v + int vtunerc_ctrldev_xchange_message(struct vtunerc_ctx *ctx, + struct vtuner_message *msg, int wait4response) + { +- //dprintk(ctx, "XCH_MSG: %d: entered\n", msg->type); ++ dprintk(ctx, "XCH_MSG: %d: entered\n", msg->type); + if (down_interruptible(&ctx->xchange_sem)) + return -ERESTARTSYS; + +@@ -413,7 +420,7 @@ int vtunerc_ctrldev_xchange_message(stru + up(&ctx->xchange_sem); + return 0; + } +- //dprintk(ctx, "XCH_MSG: %d: continue\n", msg->type); ++ dprintk(ctx, "XCH_MSG: %d: continue\n", msg->type); + + #if 0 + BUG_ON(ctx->ctrldev_request.type != -1); +@@ -433,7 +440,7 @@ int vtunerc_ctrldev_xchange_message(stru + + if (wait_event_interruptible(ctx->ctrldev_wait_response_wq, + ctx->ctrldev_response.type != -1)) { +- //dprintk(ctx, "XCH_MSG: %d: wait_event interrupted\n", msg->type); ++ dprintk(ctx, "XCH_MSG: %d: wait_event interrupted\n", msg->type); + ctx->ctrldev_request.type = -1; + up(&ctx->xchange_sem); + return -ERESTARTSYS; +@@ -441,7 +448,7 @@ int vtunerc_ctrldev_xchange_message(stru + + BUG_ON(ctx->ctrldev_response.type == -1); + +- //dprintk(ctx, "XCH_MSG: %d -> %d (DONE)\n", msg->type, ctx->ctrldev_response.type); ++ dprintk(ctx, "XCH_MSG: %d -> %d (DONE)\n", msg->type, ctx->ctrldev_response.type); + memcpy(msg, &ctx->ctrldev_response, sizeof(struct vtuner_message)); + ctx->ctrldev_response.type = -1; + +diff -uprNx '.*' vtuner.linux-driver/vtunerc_main.c vtuner_tweak/vtunerc_main.c +--- vtuner.linux-driver/vtunerc_main.c 2015-03-27 16:20:00.000000000 +0100 ++++ vtuner_tweak/vtunerc_main.c 2015-05-10 02:19:42.000000000 +0200 +@@ -101,10 +101,10 @@ static void pidtab_copy_to_msg(struct vt + struct vtuner_message *msg) + { + int i; +- +- for (i = 0; i < (MAX_PIDTAB_LEN - 1); i++) ++ ++ for (i = 0; i < MAX_PIDTAB_LEN ; i++) + msg->body.pidlist[i] = ctx->pidtab[i]; /*TODO: optimize it*/ +- msg->body.pidlist[MAX_PIDTAB_LEN - 1] = 0; ++ /* msg->body.pidlist[MAX_PIDTAB_LEN - 1] = 0; */ + } + + static int vtunerc_start_feed(struct dvb_demux_feed *feed) +@@ -128,8 +128,12 @@ static int vtunerc_start_feed(struct dvb + return -EINVAL; + } + +- /* organize PID list table */ ++ if (feed->pid >= 0x2000 ) { ++ printk(KERN_ERR "vtunerc%d: full mux not supported\n",ctx->idx); ++ return -EINVAL; ++ } + ++ /* organize PID list table */ + if (pidtab_find_index(ctx->pidtab, feed->pid) < 0) { + pidtab_add_pid(ctx->pidtab, feed->pid); + +diff -uprNx '.*' vtuner.linux-driver/vtunerc_proxyfe.c vtuner_tweak/vtunerc_proxyfe.c +--- vtuner.linux-driver/vtunerc_proxyfe.c 2015-03-27 16:20:00.000000000 +0100 ++++ vtuner_tweak/vtunerc_proxyfe.c 2016-01-10 03:04:10.468098249 +0100 +@@ -174,52 +180,12 @@ static int dvb_proxyfe_set_frontend(stru + + if (ctx->vtype == VT_S2 && c->delivery_system == SYS_DVBS2) { + /* DELIVERY SYSTEM: S2 delsys in use */ +- msg.body.fe_params.u.qpsk.fec_inner = 9; ++ msg.body.fe_params.u.qpsk.fec_inner |= 32; + + /* MODULATION */ + if (c->modulation == PSK_8) +- /* signal PSK_8 modulation used */ +- msg.body.fe_params.u.qpsk.fec_inner += 9; +- +- /* FEC */ +- switch (c->fec_inner) { +- case FEC_1_2: +- msg.body.fe_params.u.qpsk.fec_inner += 1; +- break; +- case FEC_2_3: +- msg.body.fe_params.u.qpsk.fec_inner += 2; +- break; +- case FEC_3_4: +- msg.body.fe_params.u.qpsk.fec_inner += 3; +- break; +- case FEC_4_5: +- msg.body.fe_params.u.qpsk.fec_inner += 8; +- break; +- case FEC_5_6: +- msg.body.fe_params.u.qpsk.fec_inner += 4; +- break; +- /*case FEC_6_7: // undefined +- msg.body.fe_params.u.qpsk.fec_inner += 2; +- break;*/ +- case FEC_7_8: +- msg.body.fe_params.u.qpsk.fec_inner += 5; +- break; +- case FEC_8_9: +- msg.body.fe_params.u.qpsk.fec_inner += 6; +- break; +- /*case FEC_AUTO: // undefined +- msg.body.fe_params.u.qpsk.fec_inner += 2; +- break;*/ +- case FEC_3_5: +- msg.body.fe_params.u.qpsk.fec_inner += 7; +- break; +- case FEC_9_10: +- msg.body.fe_params.u.qpsk.fec_inner += 9; +- break; +- default: +- ; /*FIXME: what now? */ +- break; +- } ++ /* signal PSK_8 modulation used */ ++ msg.body.fe_params.u.qpsk.fec_inner |= 64; + + /* ROLLOFF */ + switch (c->rolloff) { +@@ -506,10 +480,10 @@ static struct dvb_frontend_ops dvb_proxy + .frequency_tolerance = 29500, + .symbol_rate_min = 1000000, + .symbol_rate_max = 45000000, +- .caps = FE_CAN_INVERSION_AUTO | +- FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | +- FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | +- FE_CAN_QPSK ++ .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_1_2 | ++ FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_4_5 | ++ FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | ++ FE_CAN_QPSK | FE_CAN_RECOVER + }, + + .release = dvb_proxyfe_release, |