#!/bin/bash HG_REP="http://powarman.dyndns.org/hgwebdir.cgi/v4l-dvb-saa716x/" #Jun 03 18:21:32 2011 #REV_OPTS="-r 1d34d58f281c" #Sun Aug 21 17:18:00 2011 +0200 (6 weeks ago) #REV_OPTS="-r fbcf17e360ee" #Sun, 06 Nov 2011 19:04:22 +0100 Andreas Regel saa716x_ff: support correct TS mux setting for FPGA 1.10. #REV_OPTS="-r 956dbeac0169" #Mon, 24 Oct 2011 19:55:09 +0200 Andreas Regel saa716x_ff: Allow to have osd device opened twice. #REV_OPTS="-r d35cb1db5bb2" #Mon, 24 Oct 2011 19:42:05 +0200 Andreas Regel saa716x_ff: move firmware command interface code to separate file. #REV_OPTS="-r 491683c27d90" #11 Oct 2011 #saa716x_ff: Fix possible crash in IRQ handler. # #During loading or unloading the saa716x_ff module it could happen that #saa716x->priv was accessed in the IRQ handler before being initialized #or after the pointer was freed already. #REV_OPTS="-r 159875070cab" check_if_command_is_available() { type $1 >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "the necessary program \"$1\" was not found, stopping script now." exit 1 fi } apply_OSD_RAW_CMD_patch_1() { patch << EOF --- saa716x_ff_main.c.orig 2011-06-02 13:44:47.663001005 +0200 +++ saa716x_ff_main.c 2011-06-02 13:50:16.608001176 +0200 @@ -49,6 +49,24 @@ #include "stv090x.h" #include "isl6423.h" +#if !defined OSD_RAW_CMD +typedef struct osd_raw_cmd_s { + const void *cmd_data; + int cmd_len; + void *result_data; + int result_len; +} osd_raw_cmd_t; + +typedef struct osd_raw_data_s { + const void *data_buffer; + int data_length; + int data_handle; +} osd_raw_data_t; + +#define OSD_RAW_CMD _IOWR('o', 162, osd_raw_cmd_t) +#define OSD_RAW_DATA _IOWR('o', 163, osd_raw_data_t) +#endif + unsigned int verbose; module_param(verbose, int, 0644); MODULE_PARM_DESC(verbose, "verbose startup messages, default is 1 (yes)"); EOF } apply_OSD_RAW_CMD_patch_2() { patch << EOF --- saa716x_ff_cmd.h.orig 2011-11-12 14:46:51.175700236 +0100 +++ saa716x_ff_cmd.h 2011-11-12 14:45:10.103702959 +0100 @@ -1,6 +1,24 @@ #ifndef __SAA716x_FF_CMD_H #define __SAA716x_FF_CMD_H +#if !defined OSD_RAW_CMD +typedef struct osd_raw_cmd_s { + const void *cmd_data; + int cmd_len; + void *result_data; + int result_len; +} osd_raw_cmd_t; + +typedef struct osd_raw_data_s { + const void *data_buffer; + int data_length; + int data_handle; +} osd_raw_data_t; + +#define OSD_RAW_CMD _IOWR('o', 162, osd_raw_cmd_t) +#define OSD_RAW_DATA _IOWR('o', 163, osd_raw_data_t) +#endif + extern int sti7109_cmd_init(struct sti7109_dev *sti7109); extern int sti7109_raw_cmd(struct sti7109_dev * sti7109, osd_raw_cmd_t * cmd); EOF } pause() { echo "$*" echo "pause, press Enter to continue" read Anything } ### # MAIN ### WORKDIR="$(dirname $0)/" cd "$WORKDIR" WORKDIR="$(pwd)/v4l-dvb-saa716x/" echo "working dir: $WORKDIR" SUBDIR="drivers/media/common/saa716x" check_if_command_is_available sed check_if_command_is_available patch check_if_command_is_available hg check_if_command_is_available make if [ -n "$1" ] then # use parameter $1 as kernel version KVERSION="$1" else KVERSION=$(uname -r) fi KERNEL=/lib/modules/$KVERSION/ if [ ! -d "$KERNEL" ] then echo "Kernel Version $KVERSION does not exist or has no proper directory $KERNEL" exit 1 fi # check user id if [ $(id -u) = 0 ] then SUDO="" echo "Problems come up when root modifies the hg repo, regular users can't use it any more." echo "Better use a regular user account to compile this kernel module...." echo -n "Do you really want to continue? " read Answer if [ "$Answer" != "y" ]; then exit fi else SUDO="sudo" echo "Use sudo to copy compiled modules to directory $KERNEL" fi echo "compile for kernel $KVERSION" pause echo "Download or update driver from hg repository" set -e set -x if [ -d "$WORKDIR" ]; then cd "$WORKDIR" hg revert --all hg pull hg update $REV_OPTS else hg clone $HG_REP "$WORKDIR" cd "$WORKDIR" hg update $REV_OPTS fi #Do you want to add patches? Do this here cd "$WORKDIR" #patch -p1 -i FILENAME #patch -p1 -i FILENAME #We have to add some special includes here set -x cd "$WORKDIR/linux/$SUBDIR" echo "EXTRA_CFLAGS += -Idrivers/media/dvb/frontends/" >> Makefile sed -i '1 i\#include ' saa716x_ff_main.c \ saa716x_ff_ir.c if [ ! -e saa716x_ff_cmd.h ] then apply_OSD_RAW_CMD_patch_1 else apply_OSD_RAW_CMD_patch_2 fi #Clean driver, build driver cd $KERNEL/source make SUBDIRS="$WORKDIR/linux/$SUBDIR" clean make SUBDIRS="$WORKDIR/linux/$SUBDIR" CONFIG_SAA716X_CORE=m CONFIG_DVB_SAA716X_FF=m set +x echo "" echo "compile was successful, next is installing it..." pause set -x [ -d $KERNEL/kernel/$SUBDIR ] || $SUDO mkdir -p $KERNEL/kernel/$SUBDIR $SUDO rm -f $KERNEL/kernel/$SUBDIR/*.ko $SUDO mv $WORKDIR/linux/$SUBDIR/*.ko $KERNEL/kernel/$SUBDIR/ $SUDO depmod -a $KVERSION