Package: i810switch Severity: wishlist Tags: patch Hi,
The dpatch patch management system has been deprecated for some time. The Lintian currently flags use of dpatch packages as an error. The new 3.0 packaging format is an improved version which, among other things, contains patch management built-in. For more information, see: http://wiki.debian.org/Projects/DebSrc3.0 I had some free time; see attached patch to migrate to new package format. Note that all files in debian/patches/* are canocalized to *.patch. Let me know if there is anything that needs adjusting or if it is ok to upload this version in a NMU in case you are working on other issues needing attention. Thanks, Jari
>From 2a0f86e59c7e2f3f5d8c7fe3cabd30d7e1f62143 Mon Sep 17 00:00:00 2001 From: Jari Aalto <jari.aa...@cante.net> Date: Wed, 25 Apr 2012 09:05:48 +0300 Subject: [PATCH] format-3.0 Organization: Private Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Signed-off-by: Jari Aalto <jari.aa...@cante.net> --- Makefile | 10 +- Makefile.debdiff | 14 - debian/changelog | 16 +- debian/compat | 2 +- debian/control | 7 +- debian/copyright | 9 +- debian/menu | 3 +- debian/patches/00list | 1 - debian/patches/10-i810switch.c.patch | 16 + debian/patches/20-makefile.patch | 33 ++ ...ook.dpatch => 50-support-945-940-macbook.patch} | 4 + debian/patches/series | 3 + debian/rules | 32 +- debian/source/format | 1 + i810switch | Bin 22317 -> 0 bytes i810switch.c | 2 +- i810switch.c.new | 555 -------------------- i810switch.o | Bin 10376 -> 0 bytes 18 files changed, 100 insertions(+), 608 deletions(-) delete mode 100644 Makefile.debdiff delete mode 100644 debian/patches/00list create mode 100644 debian/patches/10-i810switch.c.patch create mode 100644 debian/patches/20-makefile.patch rename debian/patches/{01_support_945_940_macbook.dpatch => 50-support-945-940-macbook.patch} (80%) create mode 100644 debian/patches/series create mode 100644 debian/source/format delete mode 100755 i810switch delete mode 100644 i810switch.c.new delete mode 100644 i810switch.o diff --git a/Makefile b/Makefile index 4fdfee1..5359d39 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,4 @@ OBJECTS = i810switch.o -INSTALL=/usr/bin/install -CC=gcc - %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< @@ -12,8 +9,10 @@ i810switch: $(OBJECTS) $(CC) $(CFLAGS) -o $@ $(OBJECTS) install: i810switch - ${INSTALL} -D -m 4754 --group=video i810switch ${DESTDIR}/usr/bin/i810switch - ${INSTALL} -D -m 0754 --group=video i810rotate ${DESTDIR}/usr/bin/i810rotate + install -d $(DESTDIR)/usr/bin + install -d $(DESTDIR)/usr/share/man/man1 + install i810switch i810rotate $(DESTDIR)/usr/bin + install i810switch.1.gz i810rotate.1.gz $(DESTDIR)/usr/share/man/man1 uninstall: rm -f $(DESTDIR)/usr/bin/i810switch @@ -23,3 +22,4 @@ uninstall: clean: @rm -f $(OBJECTS) i810switch + diff --git a/Makefile.debdiff b/Makefile.debdiff deleted file mode 100644 index a9bef18..0000000 --- a/Makefile.debdiff +++ /dev/null @@ -1,14 +0,0 @@ -DESTDIR= -CC=gcc -BIN=i810switch -SOURCE=i810switch.c -INSTALL=/usr/bin/install -all: - ${CC} -o ${BIN} ${SOURCE} - -clean: - rm ${BIN} - -install: all - ${INSTALL} -D -m 4750 --group=video ${BIN} ${DESTDIR}/usr/bin/${BIN} - ${INSTALL} -D -m 0750 --group=video i810rotate ${DESTDIR}/usr/bin/i810rotate diff --git a/debian/changelog b/debian/changelog index 2d24f6c..e279dd6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,18 @@ +i810switch (0.6.5-7.1) unstable; urgency=low + + * Non-maintainer upload. + * Remove deprecated dpatch and upgrade to packaging format "3.0 quilt". + * Update to Standards-Version to 3.9.3 and debhelper to 9. + * Add build-arch and build-indep targets; use dh_prep in rules file. + * Update homepage URL to current location. + * Patches 10 and 20 are new; in-line changes to original sources. + * Fix copyright-refers-to-symlink-license (Lintian). + * Fix debian-rules-ignores-make-clean-error (Lintian). + * Fix menu-item-uses-apps-section (Lintian). + * Fix no-homepage-field (Lintian). + + -- Jari Aalto <jari.aa...@cante.net> Wed, 25 Apr 2012 08:57:20 +0300 + i810switch (0.6.5-7) unstable; urgency=low * Added kfreebsd-amd64 as an architecture for the package. Closes: #494980. @@ -105,4 +120,3 @@ i810switch (0.3-1) unstable; urgency=low * Initial Release. Closes: #197406 -- James Bromberger <j...@debian.org> Wed, 3 Jul 2003 23:49:44 +0100 - diff --git a/debian/compat b/debian/compat index b8626c4..ec63514 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -4 +9 diff --git a/debian/control b/debian/control index c847f52..7ec5ba9 100644 --- a/debian/control +++ b/debian/control @@ -2,12 +2,13 @@ Source: i810switch Section: utils Priority: optional Maintainer: James Bromberger <j...@debian.org> -Build-Depends: debhelper (>> 4.0.0), dpatch -Standards-Version: 3.8.0 +Build-Depends: debhelper (>= 9) +Standards-Version: 3.9.3 +Homepage: http://www.pm.waw.pl/~jslupski/vaio Package: i810switch Architecture: i386 kfreebsd-i386 amd64 hurd-i386 kfreebsd-amd64 -Depends: ${shlibs:Depends}, pciutils (>= 1:2.1.11-6) +Depends: ${misc:Depends}, ${shlibs:Depends}, pciutils (>= 1:2.1.11-6) Description: Enables/disables video output to CRT/LCD on i810 video hardware i810switch enables/disables the output to the CRT display and LCD, depending on the i810 graphics controller hardware. Such hardware is found diff --git a/debian/copyright b/debian/copyright index 2753169..c0b21b6 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,9 +1,12 @@ This package was debianized by James Bromberger <j...@debian.org> on Sat, 14 Jun 2003 17:55:52 +0100. -It was downloaded from http://www.pm.waw.pl/~jslupski/vaio/ +It was downloaded from http://juljas.net/vaio -Copyright: Antonino Daplas <adap...@pol.net>, mano <m...@ac3.mopera.ne.jp>, +Copyright: + + Antonino Daplas (original author) <adap...@pol.net> + mano <m...@ac3.mopera.ne.jp> Jeff Ames <j...@po.cwru.edu> You should have received a copy of the GNU General Public License along @@ -11,4 +14,4 @@ Copyright: Antonino Daplas <adap...@pol.net>, mano <m...@ac3.mopera.ne.jp>, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian GNU/Linux systems, the complete text of the GNU General -Public License can be found in `/usr/share/common-licenses/GPL'. +Public License can be found in `/usr/share/common-licenses/GPL-2'. diff --git a/debian/menu b/debian/menu index 5c16a3d..35be12d 100644 --- a/debian/menu +++ b/debian/menu @@ -1,3 +1,4 @@ ?package(i810switch): needs="text" title="i810rotate" \ - section="Apps/System" longtitle="Rotate video output on i810 chipset" \ + section="Applications/System/Hardware" \ + longtitle="Rotate video output on i810 chipset" \ command="/usr/bin/i810rotate" diff --git a/debian/patches/00list b/debian/patches/00list deleted file mode 100644 index 3cbd2b5..0000000 --- a/debian/patches/00list +++ /dev/null @@ -1 +0,0 @@ -01_support_945_940_macbook diff --git a/debian/patches/10-i810switch.c.patch b/debian/patches/10-i810switch.c.patch new file mode 100644 index 0000000..69d77f7 --- /dev/null +++ b/debian/patches/10-i810switch.c.patch @@ -0,0 +1,16 @@ +From: Unknown +Subject: Use absolute path to call lspci(1) + +diff --git a/i810switch.c b/i810switch.c +index 8831daa..4979b59 100644 +--- a/i810switch.c ++++ b/i810switch.c +@@ -9,7 +9,7 @@ + #include <errno.h> + + #define VERSION "0.6.5beta" +-#define CMD_LSPCI "lspci" ++#define CMD_LSPCI "/usr/bin/lspci" + + static const char *Opt_lcd = NULL; + static const char *Opt_crt = NULL; diff --git a/debian/patches/20-makefile.patch b/debian/patches/20-makefile.patch new file mode 100644 index 0000000..00a102d --- /dev/null +++ b/debian/patches/20-makefile.patch @@ -0,0 +1,33 @@ +From: Unknown +Subject: Adjust install target in Makefile + +diff --git a/Makefile b/Makefile +index 5359d39..4fdfee1 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,4 +1,7 @@ + OBJECTS = i810switch.o ++INSTALL=/usr/bin/install ++CC=gcc ++ + + %.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< +@@ -9,10 +12,8 @@ i810switch: $(OBJECTS) + $(CC) $(CFLAGS) -o $@ $(OBJECTS) + + install: i810switch +- install -d $(DESTDIR)/usr/bin +- install -d $(DESTDIR)/usr/share/man/man1 +- install i810switch i810rotate $(DESTDIR)/usr/bin +- install i810switch.1.gz i810rotate.1.gz $(DESTDIR)/usr/share/man/man1 ++ ${INSTALL} -D -m 4754 --group=video i810switch ${DESTDIR}/usr/bin/i810switch ++ ${INSTALL} -D -m 0754 --group=video i810rotate ${DESTDIR}/usr/bin/i810rotate + + uninstall: + rm -f $(DESTDIR)/usr/bin/i810switch +@@ -22,4 +23,3 @@ uninstall: + + clean: + @rm -f $(OBJECTS) i810switch +- diff --git a/debian/patches/01_support_945_940_macbook.dpatch b/debian/patches/50-support-945-940-macbook.patch similarity index 80% rename from debian/patches/01_support_945_940_macbook.dpatch rename to debian/patches/50-support-945-940-macbook.patch index 6045946..0587008 100644 --- a/debian/patches/01_support_945_940_macbook.dpatch +++ b/debian/patches/50-support-945-940-macbook.patch @@ -1,3 +1,7 @@ +From: Thomas Perl <t...@perli.net> +Subject: support for the Intel Corporation Mobile 945GM/GMS/940GML + Express Integrated Graphics found in MacBooks + --- i810switch-0.6.5/i810switch.c 2006-12-24 22:30:48.000000000 +0100 +++ i810switch-0.6.5-thp/i810switch.c 2006-12-24 22:27:47.000000000 +0100 @@ -60,6 +60,7 @@ diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..bdb90e1 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,3 @@ +10-i810switch.c.patch +20-makefile.patch +50-support-945-940-macbook.patch diff --git a/debian/rules b/debian/rules index 9eb7c13..ef9b3fa 100755 --- a/debian/rules +++ b/debian/rules @@ -5,9 +5,6 @@ # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 - - - CFLAGS = -Wall -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) @@ -19,28 +16,15 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif -configure: patch configure-stamp +configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. touch configure-stamp -clean-patched: - $(testdir) - $(testroot) - ${MAKE} clean - rm -rf debian/i810switch debian/files debian/substvars - -patch: patch-stamp -patch-stamp: - dpatch apply-all - dpatch cat-all >patch-stamp - -unpatch: - dpatch deapply-all - rm -rf patch-stamp debian/patched - +build-arch: build +build-indep: build build: build-stamp @@ -53,20 +37,22 @@ build-stamp: configure-stamp touch build-stamp -clean: clean-patched unpatch +clean: dh_testdir dh_testroot - rm -f build-stamp configure-stamp + rm -f build-stamp configure-stamp \ + i810switch *.o # Add here commands to clean up after the build process. - -$(MAKE) clean + [ ! -f Makefile ] || $(MAKE) clean + rm -rf debian/i810switch debian/files debian/substvars dh_clean install: build dh_testdir dh_testroot - dh_clean -k + dh_prep dh_installdirs # Add here commands to install the package into debian/i810switch. diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/i810switch b/i810switch deleted file mode 100755 index 84ae1cec2572e6c7e400d7eb825ed692c632b4ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22317 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 diff --git a/i810switch.c b/i810switch.c index 4979b59..8831daa 100644 --- a/i810switch.c +++ b/i810switch.c @@ -9,7 +9,7 @@ #include <errno.h> #define VERSION "0.6.5beta" -#define CMD_LSPCI "/usr/bin/lspci" +#define CMD_LSPCI "lspci" static const char *Opt_lcd = NULL; static const char *Opt_crt = NULL; diff --git a/i810switch.c.new b/i810switch.c.new deleted file mode 100644 index 4979b59..0000000 --- a/i810switch.c.new +++ /dev/null @@ -1,555 +0,0 @@ -#include <stdarg.h> -#include <stdlib.h> -#include <fcntl.h> -#include <sys/mman.h> -#include <stdio.h> -#include <unistd.h> -#include <sys/types.h> -#include <string.h> -#include <errno.h> - -#define VERSION "0.6.5beta" -#define CMD_LSPCI "/usr/bin/lspci" - -static const char *Opt_lcd = NULL; -static const char *Opt_crt = NULL; - -struct i810_par { - unsigned char *mmio; - int mem; - int flag; -}; - -#define i810_readb(mmio_base, where) \ - *((volatile char *) (mmio_base + where)) - -#define i810_readw(mmio_base, where) \ - *((volatile short *) (mmio_base + where)) - -#define i810_readl(mmio_base, where) \ - *((volatile int *) (mmio_base + where)) - -#define i810_writeb(mmio_base, where, val) \ - *((volatile char *) (mmio_base + where)) = (volatile char) val - -#define i810_writew(mmio_base, where, val) \ - *((volatile short *) (mmio_base + where)) = (volatile short) val - -#define i810_writel(mmio_base, where, val) \ - *((volatile int *) (mmio_base + where)) = (volatile int) val - -#define I810_MEMOPEN 1 -#define I810_MMIO 2 - -/* chip types */ -#define I810 1 -#define I830 2 -#define I855 3 -#define I915 4 - - -/* PCI IDs */ -#define I810STR "8086:7121" -#define I810ESTR "8086:7123" -#define I810_DC100STR_1 "8086:7125" -#define I810_DC100STR_2 "8086:1102" -#define I810_IGSTR "8086:1112" -#define I810_CFCSTR "8086:1132" -#define I830STR "8086:3577" -#define I845STR "8086:2562" -#define I855STR "8086:3582" -//#define I865STR "8086:2572" -#define I915STR "8086:2592" -#define MEMSTR "Memory at" -#define NONPRSTR "32-bit, non-prefetchable" - -/* I810 registers */ -#define I810_HVSYNC 0x05000 - -#define I810_DCLK_0D 0x06000 -#define I810_DCLK_1D 0x06004 -#define I810_DCLK_0DS 0x06010 -#define I810_PWR_CLKC 0x06014 - -#define I810_HTOTAL 0x60000 -#define I810_HBLANK 0x60004 -#define I810_HSYNC 0x60008 -#define I810_VTOTAL 0x6000c -#define I810_VBLANK 0x60010 -#define I810_VSYNC 0x60014 -#define I810_LCDTV_C 0x60018 -#define I810_OVRACT 0x6001c -#define I810_BCLRPAT 0x60020 - -#define I810_PIXCONF 0x70008 - -/* I830 registers */ -#define I830_HTOTAL_A 0x60000 -#define I830_HBLANK_A 0x60004 -#define I830_HSYNC_A 0x60008 -#define I830_VTOTAL_A 0x6000c -#define I830_VBLANK_A 0x60010 -#define I830_VSYNC_A 0x60014 -#define I830_PIPEASRC 0x6001c -#define I830_BCLRPAT_A 0x60020 - -#define I830_HTOTAL_B 0x61000 -#define I830_HBLANK_B 0x61004 -#define I830_HSYNC_B 0x61008 -#define I830_VTOTAL_B 0x6100c -#define I830_VBLANK_B 0x61010 -#define I830_VSYNC_B 0x61014 -#define I830_PIPEBSRC 0x6101c -#define I830_BCLRPAT_B 0x61020 - -#define I830_DPLL_A 0x06014 -#define I830_DPLL_B 0x06018 - -#define I830_FPA0 0x06040 -#define I830_FPA1 0x06044 -#define I830_FPA2 0x06048 -#define I830_FPA3 0x0604c - -#define I830_ADPA 0x61100 -#define I830_DVOA 0x61120 -#define I830_DVOB 0x61140 -#define I830_DVOC 0x61160 -#define I830_LVDS 0x61180 - -#define I830_ADPA_SRCDIM 0x61104 -#define I830_DVOA_SRCDIM 0x61124 -#define I830_DVOB_SRCDIM 0x61144 -#define I830_DVOC_SRCDIM 0x61164 -#define I830_LVDS_SRCDIM 0x61184 - -#define I830_PIPEACONF 0x70008 -#define I830_PIPEBCONF 0x71008 - -#define I830_DSPACTRL 0x70180 -#define I830_DSPBCTRL 0x71180 - -#define I830_DSPABASE 0x70184 -#define I830_DSPASTRIDE 0x70188 -#define I830_DSPBBASE 0x71184 -#define I830_DSPBSTRIDE 0x71188 - -#define I830_DCLK_0D 0x06000 -#define I830_DCLK_1D 0x06004 -#define I830_DCLK_0DS 0x06010 - -#define I830_SWF0 0x71410 -#define I830_SWF1 0x71414 -#define I830_SWF2 0x71418 -#define I830_SWF3 0x7141c -#define I830_SWF4 0x71420 -#define I830_SWF5 0x71424 -#define I830_SWF6 0x71428 - -#define I830_LCDTV_C 0x06014 -#define I855_LCDTV_C 0x61204 - -static void release_resource(struct i810_par *par) -{ - if (par->flag & I810_MEMOPEN) - close(par->mem); - if (par->flag & I810_MMIO) - munmap(par->mmio, 512 * 1024); -} - -void probe_card_I810(struct i810_par *par) -{ - printf(" DCLK 0D=%08lX 1D=%08lX 0DS=%08lX\n", - i810_readl(par->mmio, I810_DCLK_0D), i810_readl(par->mmio, I810_DCLK_1D), - i810_readl(par->mmio, I810_DCLK_0DS)); - printf(" PWR_CLKC=%08lX HVSYNC=%08lX\n", - i810_readl(par->mmio, I810_PWR_CLKC), - i810_readl(par->mmio, I810_HVSYNC)); - printf(" 020cc=%08lX 020d8=%08lX 020dc=%08lX\n", - i810_readl(par->mmio, 0x20cc), i810_readl(par->mmio, 0x20d8), - i810_readl(par->mmio, 0x20dc)); - printf(" HTOTAL=%08lX HBLANK=%08lX HSYNC=%08lX\n", - i810_readl(par->mmio, I810_HTOTAL), - i810_readl(par->mmio, I810_HBLANK), - i810_readl(par->mmio, I810_HSYNC)); - printf(" VTOTAL=%08lX VBLANK=%08lX VSYNC=%08lX\n", - i810_readl(par->mmio, I810_VTOTAL), - i810_readl(par->mmio, I810_VBLANK), - i810_readl(par->mmio, I810_VSYNC)); - printf(" OVRACT=%08lX PIXCONF=%08lX 70080=%08lX\n", - i810_readl(par->mmio, I810_OVRACT), - i810_readl(par->mmio, I810_PIXCONF), - i810_readl(par->mmio, 0x70080)); -} - -void probe_card_I830(struct i810_par *par) -{ - printf(" DCLK 0D=%08lX 1D=%08lX 0DS=%08lX DPLL A=%08lX B=%08lX\n", - i810_readl(par->mmio, I830_DCLK_0D), i810_readl(par->mmio, I830_DCLK_1D), - i810_readl(par->mmio, I830_DCLK_0DS), - i810_readl(par->mmio, I830_DPLL_A), i810_readl(par->mmio, I830_DPLL_B)); - printf(" ADPA=%08lX DVO A=%08lX B=%08lX C=%08lX LVDS=%08lX\n", - i810_readl(par->mmio, I830_ADPA), i810_readl(par->mmio, I830_DVOA), - i810_readl(par->mmio, I830_DVOB), i810_readl(par->mmio, I830_DVOC), - i810_readl(par->mmio, I830_LVDS)); - printf(" DIM =%08lX DIM A=%08lX B=%08lX C=%08lX %08lX\n", - i810_readl(par->mmio, I830_ADPA_SRCDIM), i810_readl(par->mmio, I830_DVOA_SRCDIM), - i810_readl(par->mmio, I830_DVOB_SRCDIM), i810_readl(par->mmio, I830_DVOC_SRCDIM), - i810_readl(par->mmio, I830_LVDS_SRCDIM)); - printf(" FPA %08lX %08lX %08lX %08lX\n", - i810_readl(par->mmio, I830_FPA0), i810_readl(par->mmio, I830_FPA1), - i810_readl(par->mmio, I830_FPA2), i810_readl(par->mmio, I830_FPA3)); - printf(" 020cc=%08lX 020d8=%08lX 020dc=%08lX\n", - i810_readl(par->mmio, 0x20cc), i810_readl(par->mmio, 0x20d8), - i810_readl(par->mmio, 0x20dc)); - printf(" 71280=%08lX 71400=%08lX\n", - i810_readl(par->mmio, 0x71280), i810_readl(par->mmio, 0x71400)); - printf(" Pipe A\n"); - printf(" HTOTAL=%08lX HBLANK=%08lX HSYNC=%08lX\n", - i810_readl(par->mmio, I830_HTOTAL_A), - i810_readl(par->mmio, I830_HBLANK_A), - i810_readl(par->mmio, I830_HSYNC_A)); - printf(" VTOTAL=%08lX VBLANK=%08lX VSYNC=%08lX\n", - i810_readl(par->mmio, I830_VTOTAL_A), - i810_readl(par->mmio, I830_VBLANK_A), - i810_readl(par->mmio, I830_VSYNC_A)); - printf(" SOURCE=%08lX CONFIG=%08lX 70030=%08lX 70080=%08lX\n", - i810_readl(par->mmio, I830_PIPEASRC), - i810_readl(par->mmio, I830_PIPEACONF), - i810_readl(par->mmio, 0x70030), - i810_readl(par->mmio, 0x70080)); - printf(" Pipe B\n"); - printf(" HTOTAL=%08lX HBLANK=%08lX HSYNC=%08lX\n", - i810_readl(par->mmio, I830_HTOTAL_B), - i810_readl(par->mmio, I830_HBLANK_B), - i810_readl(par->mmio, I830_HSYNC_B)); - printf(" VTOTAL=%08lX VBLANK=%08lX VSYNC=%08lX\n", - i810_readl(par->mmio, I830_VTOTAL_B), - i810_readl(par->mmio, I830_VBLANK_B), - i810_readl(par->mmio, I830_VSYNC_B)); - printf(" SOURCE=%08lX CONFIG=%08lX 71030=%08lX 71080=%08lX\n", - i810_readl(par->mmio, I830_PIPEBSRC), - i810_readl(par->mmio, I830_PIPEBCONF), - i810_readl(par->mmio, 0x71030), - i810_readl(par->mmio, 0x71080)); - printf(" Display plane A\n"); - printf(" CTRL=%08lX BASE=%08lX STRIDE=%08lX\n", - i810_readl(par->mmio, I830_DSPACTRL), - i810_readl(par->mmio, I830_DSPABASE), - i810_readl(par->mmio, I830_DSPASTRIDE)); - printf(" Display plane B\n"); - printf(" CTRL=%08lX BASE=%08lX STRIDE=%08lX\n", - i810_readl(par->mmio, I830_DSPBCTRL), - i810_readl(par->mmio, I830_DSPBBASE), - i810_readl(par->mmio, I830_DSPBSTRIDE)); -} - -char *i810_chip(char **buff_ptr, int *len_ptr, FILE *pci_f, int* chiptype) -{ - int i; - char *p; - - while (getline(buff_ptr, len_ptr, pci_f) > 0) { - i = (p = strstr(*buff_ptr, I810STR)) != NULL || - (p = strstr(*buff_ptr, I810ESTR)) != NULL || - (p = strstr(*buff_ptr, I810_DC100STR_1)) != NULL || - (p = strstr(*buff_ptr, I810_DC100STR_2)) != NULL || - (p = strstr(*buff_ptr, I810_IGSTR)) != NULL || - (p = strstr(*buff_ptr, I810_CFCSTR)) != NULL; - if (i) - { - *chiptype = I810; - return p; - } - - i = (p = strstr(*buff_ptr, I830STR)) != NULL || -#if defined (I865STR) - (p = strstr(*buff_ptr, I865STR)) != NULL || -#endif /*defined (I865STR)*/ - (p = strstr(*buff_ptr, I845STR)) != NULL; - if (i) - { - *chiptype = I830; - return p; - } - - i = (p = strstr(*buff_ptr, I855STR)) != NULL; - if (i) - { - *chiptype = I855; - return p; - } - - i = (p = strstr(*buff_ptr, I915STR)) != NULL; - if (i) - { - *chiptype = I915; - return p; - } - } - return NULL; -} - -unsigned long i810_addr(char **buff_ptr, int *len_ptr, FILE *pci_f) -{ - char *p; - - while (getline(buff_ptr, len_ptr, pci_f) > 0) - if (strstr(*buff_ptr, NONPRSTR) != NULL) { - p = strstr(*buff_ptr, MEMSTR); - if (p != NULL) - return strtoul(p+sizeof(MEMSTR), NULL, 16); - } - return 0; -} - -int i810_usage () -{ - fprintf(stderr, "usage: i810switch [crt on/off] [lcd on/off] [probe]\n"); - fprintf(stderr, " crt: enables/disables the output to the CRT display\n"); - fprintf(stderr, " lcd: enables/disables the output to the LCD\n"); - fprintf(stderr, " probe: dumps the video chipset registers\n"); - fprintf(stderr, " no options: displays the current output status\n"); - return 1; -} - -int main (int argc, char *argv[]) -{ - struct i810_par par; - unsigned long addr; - int i, crt = -1, lcd = -1, probe = 0, err = 0, count = 0, chiptype, len = 0; - FILE *pci_f; - char *buff = NULL; - char lspcistr[] = CMD_LSPCI " -v -d xxxx:xxxx"; - char *chip; - - putenv("PATH=/sbin:/usr/sbin:/bin:/usr/bin"); - - while (--argc > 0) { - argv++; - if (!strcmp(argv[0], "crt")) { - if (--argc > 0) { - argv++; - if (!strcmp(argv[0], "on")) - crt = 1; - else if (!strcmp(argv[0], "off")) - crt = 0; - else - exit(i810_usage()); - } else { - exit(i810_usage()); - } - } else if (!strcmp(argv[0], "lcd")) { - argv++; - if (--argc > 0) { - if (!strcmp(argv[0], "on")) - lcd = 1; - else if (!strcmp(argv[0], "off")) - lcd = 0; - else - exit(i810_usage()); - } else { - exit(i810_usage()); - } - } else if (!strcmp(argv[0], "probe")) { - probe = 1; - } else { - exit(i810_usage()); - } - } - - pci_f = popen(CMD_LSPCI " -n", "r"); - if (!pci_f) { - fprintf(stderr, "Something is wrong with lspci.\n"); - exit(1); - } - chip = i810_chip(&buff, &len, pci_f, &chiptype); - if (chip == NULL) { - fprintf(stderr, "PCI id of i810 is not recognized.\n"); - exit(1); - } - pclose(pci_f); - - { - char *p = strstr(lspcistr, "xxxx:xxxx"); - if (p == 0) { - fprintf(stderr, "CMD_LSPCI is wrong.\n"); - exit(1); - } - memcpy(p, chip, 9); - } - - pci_f = popen(lspcistr, "r"); - if (!pci_f) { - fprintf(stderr, "Something is wrong with lspci.\n"); - exit(1); - } - addr = i810_addr(&buff, &len, pci_f); - if (addr == 0) { - fprintf(stderr, "Something is wrong with lspci.\n"); - exit(1); - } - pclose(pci_f); - - memset(&par, 0, sizeof(struct i810_par)); - par.mem = open("/dev/mem", (crt+lcd == -2) ? O_RDONLY : O_RDWR); - if (par.mem == -1) { - i = errno; - perror("/dev/mem"); - if (i == EACCES && geteuid() != 0) - fprintf(stderr, "Must have access to `/dev/mem'.\n"); - release_resource(&par); - exit(1); - } - par.flag |= I810_MEMOPEN; - - par.mmio = mmap(NULL, 512 * 1024, (crt+lcd == -2) ? PROT_READ : PROT_WRITE | PROT_READ, - MAP_SHARED, par.mem, addr); - if (!par.mmio) { - release_resource(&par); - exit(1); - } - - par.flag |= I810_MMIO; - - if (probe) - { - char *chipname = (chiptype == I810) ? "i810" : "i830"; - printf("i810switch %s probe\n", VERSION); - printf("%s (%s) io=0x%8lX\n", chipname, lspcistr + 12, addr); - if (chiptype == I810) - { - probe_card_I810(&par); - } else { - probe_card_I830(&par); - } - release_resource(&par); - exit(0); - } - - if (crt+lcd == -2) { - if (chiptype == I810) { - printf("CRT: "); - if (i810_readl(par.mmio, I810_PWR_CLKC) & 1) - printf("on\n"); - else - printf("off\n"); - - printf("LCD: "); - if (i810_readl(par.mmio, I810_LCDTV_C) & 0xc00) - printf("off\n"); - else - printf("on\n"); - } - else if (chiptype == I830 || chiptype == I915) { - printf("CRT: "); - if (i810_readl(par.mmio, I830_ADPA) & 0x80000000) - printf("on\n"); - else - printf("off\n"); - printf("LCD: "); - if (i810_readl(par.mmio, I830_LCDTV_C) & 0x40000000) - printf("on\n"); - else - printf("off\n"); - } - else if (chiptype == I855) { - printf("CRT: "); - if (i810_readl(par.mmio, I830_ADPA) & 0x80000000) - printf("on\n"); - else - printf("off\n"); - printf("LCD: "); - if (i810_readl(par.mmio, I855_LCDTV_C) & 1) - printf("on\n"); - else - printf("off\n"); - } - } - - if (crt != -1) { - if (chiptype == I810) { - int pwr_clkc = i810_readl(par.mmio, I810_PWR_CLKC); - int hvsync = i810_readl(par.mmio, I810_HVSYNC); - - if (crt == 0) { - printf("Disabling CRT display...\n"); - pwr_clkc &= ~1; - hvsync = 0xa0000; - } else { - printf("Enabling CRT display...\n"); - pwr_clkc |= 1; - hvsync = 0; - } - i810_writel(par.mmio, I810_PWR_CLKC, pwr_clkc); - i810_writel(par.mmio, I810_HVSYNC, hvsync); - } - else if (chiptype == I830 || chiptype == I855 || chiptype == I915) - { - int i830_adpa = i810_readl(par.mmio, I830_ADPA); - int dspactrl = i810_readl(par.mmio, I830_DSPACTRL); - int dspbctrl = i810_readl(par.mmio, I830_DSPBCTRL); - int pipe = 0; - - /* Find active display plane, and use the same pipe it's using */ - if (dspactrl & (1<<31)) - pipe = (dspactrl & (1<<24)) >> 24; - else if (dspbctrl & (1<<31)) - pipe = (dspbctrl & (1<<24)) >> 24; - else - fprintf(stderr, "Warning: No active display plane detected. Trying pipe A.\n"); - if (crt == 0) { - printf("Disabling CRT display...\n"); - i830_adpa = (i830_adpa & ~0x80000000 & ~(pipe<<30)) | 0xc00; - } else { - printf("Enabling CRT display...\n"); - i830_adpa = (i830_adpa | 0x80000000 | (pipe<<30)) & ~0xc00; - } - i810_writel(par.mmio, I830_ADPA, i830_adpa); - } - } - - if (lcd != -1) { - if (chiptype == I810) { - int lcdtv_c = i810_readl(par.mmio, I810_LCDTV_C); - if (lcd == 0) { - printf("Disabling LCD...\n"); - lcdtv_c |= 0xc00; - } else { - printf("Enabling LCD...\n"); - lcdtv_c &= ~(0xc00); - } - i810_writel(par.mmio, I810_LCDTV_C, lcdtv_c); - } - else if (chiptype == I830 || chiptype == I915) { - int lcdtv_c; - if (lcd == 0) { - printf("Disabling LCD...\n"); - lcdtv_c = i810_readl(par.mmio, I830_LCDTV_C); - lcdtv_c &= ~(0x40000000); - i810_writel(par.mmio, I830_LCDTV_C, lcdtv_c); - } else { - printf("Enabling LCD...\n"); - lcdtv_c = i810_readl(par.mmio, I830_LCDTV_C); - lcdtv_c |= 0x40000000; - i810_writel(par.mmio, I830_LCDTV_C, lcdtv_c); - } - } - else if (chiptype == I855) { - int lcdtv_c; - if (lcd == 0) { - printf("Disabling LCD...\n"); - lcdtv_c = i810_readl(par.mmio, I855_LCDTV_C); - lcdtv_c &= ~(1); - i810_writel(par.mmio, I855_LCDTV_C, lcdtv_c); - } else { - printf("Enabling LCD...\n"); - lcdtv_c |= 1; - i810_writel(par.mmio, I855_LCDTV_C, lcdtv_c); - } - } - else fprintf(stderr, "No LCD support for this chipset.\n"); - } - - release_resource(&par); - exit(0); -} diff --git a/i810switch.o b/i810switch.o deleted file mode 100644 index 0b0ef89e3e8f1b3b22b9717b6f7e1dbbbe6ea5fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10376 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 QBCa2j9&!B>Nv!+-0{y;-ZU6uP -- 1.7.10