mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
added core/linux-mmp
This commit is contained in:
parent
0d06af6bd1
commit
af254650bc
10 changed files with 34364 additions and 0 deletions
275
core/linux-mmp/PKGBUILD
Normal file
275
core/linux-mmp/PKGBUILD
Normal file
|
@ -0,0 +1,275 @@
|
||||||
|
# Maintainer: Kevin Mihelich <kevin@archlinuxarm.org>
|
||||||
|
|
||||||
|
noautobuild=1
|
||||||
|
plugrel=1
|
||||||
|
|
||||||
|
pkgbase=linux-mmp
|
||||||
|
pkgname=('linux-mmp' 'linux-headers-mmp')
|
||||||
|
# pkgname=linux-custom # Build kernel with a different name
|
||||||
|
_kernelname=${pkgname#linux}
|
||||||
|
_basekernel=3.1
|
||||||
|
pkgver=${_basekernel}.10
|
||||||
|
pkgrel=1
|
||||||
|
arch=('arm')
|
||||||
|
url="http://www.kernel.org/"
|
||||||
|
license=('GPL2')
|
||||||
|
makedepends=('xmlto' 'docbook-xsl' 'uboot-mkimage')
|
||||||
|
options=('!strip')
|
||||||
|
source=("ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-${_basekernel}.tar.bz2"
|
||||||
|
"ftp://ftp.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.bz2"
|
||||||
|
'archlinuxarm.patch'
|
||||||
|
'aufs3-kbuild.patch'
|
||||||
|
'aufs3-base.patch'
|
||||||
|
'aufs3-standalone.patch'
|
||||||
|
'aufs3-git-extras.patch'
|
||||||
|
'config'
|
||||||
|
'mach-types::http://www.arm.linux.org.uk/developer/machines/download.php'
|
||||||
|
'change-default-console-loglevel.patch'
|
||||||
|
'usb-add-reset-resume-quirk-for-several-webcams.patch')
|
||||||
|
md5sums=('8d43453f8159b2332ad410b19d86a931'
|
||||||
|
'a8e1c25a93a685ec2a1c3a808715fe9d'
|
||||||
|
'cd56cdcb3b053949e97490b9d06a283f'
|
||||||
|
'3f64ed9d71499fe9293dc671f4e4087e'
|
||||||
|
'29628745258df910abfb8cb24ca3ccd9'
|
||||||
|
'c9e6e8bb0774a89f7f9bd30a13be7532'
|
||||||
|
'55b04499a4578e586cf5a4d0b69fc5aa'
|
||||||
|
'a19aa1b6f8cd9b8a342a104c29fbe466'
|
||||||
|
'62043b56b46e4ce8fce3011637acbd00'
|
||||||
|
'9d3c56a4b999c8bfbd4018089a62f662'
|
||||||
|
'd00814b57448895e65fbbc800e8a58ba')
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cd "${srcdir}/linux-${_basekernel}"
|
||||||
|
|
||||||
|
# add upstream patch
|
||||||
|
patch -p1 -i "${srcdir}/patch-${pkgver}"
|
||||||
|
|
||||||
|
# Add the USB_QUIRK_RESET_RESUME for several webcams
|
||||||
|
# FS#26528
|
||||||
|
patch -Np1 -i "${srcdir}/usb-add-reset-resume-quirk-for-several-webcams.patch"
|
||||||
|
|
||||||
|
# Add Arch Linux ARM patch, complete mach-types
|
||||||
|
patch -Np1 -i "${srcdir}/archlinuxarm.patch"
|
||||||
|
cp "${srcdir}/mach-types" arch/arm/tools
|
||||||
|
|
||||||
|
# Add AUFS3 patches
|
||||||
|
patch -Np1 -i "${srcdir}/aufs3-kbuild.patch"
|
||||||
|
patch -Np1 -i "${srcdir}/aufs3-base.patch"
|
||||||
|
patch -Np1 -i "${srcdir}/aufs3-standalone.patch"
|
||||||
|
patch -Np1 -i "${srcdir}/aufs3-git-extras.patch"
|
||||||
|
|
||||||
|
# add latest fixes from stable queue, if needed
|
||||||
|
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
|
||||||
|
|
||||||
|
# set DEFAULT_CONSOLE_LOGLEVEL to 4 (same value as the 'quiet' kernel param)
|
||||||
|
# remove this when a Kconfig knob is made available by upstream
|
||||||
|
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
|
||||||
|
patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch"
|
||||||
|
|
||||||
|
cat "${srcdir}/config" > ./.config
|
||||||
|
|
||||||
|
# set extraversion to pkgrel
|
||||||
|
sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile
|
||||||
|
|
||||||
|
# get kernel version
|
||||||
|
make prepare
|
||||||
|
|
||||||
|
# load configuration
|
||||||
|
# Configure the kernel. Replace the line below with one of your choice.
|
||||||
|
#make menuconfig # CLI menu for configuration
|
||||||
|
#make nconfig # new CLI menu for configuration
|
||||||
|
#make xconfig # X-based configuration
|
||||||
|
#make oldconfig # using old config from previous kernel version
|
||||||
|
# ... or manually edit .config
|
||||||
|
|
||||||
|
# Copy back our configuration (use with new kernel version)
|
||||||
|
#cp ./.config ../${_basekernel}.config
|
||||||
|
|
||||||
|
####################
|
||||||
|
# stop here
|
||||||
|
# this is useful to configure the kernel
|
||||||
|
#msg "Stopping build"
|
||||||
|
#return 1
|
||||||
|
####################
|
||||||
|
|
||||||
|
#yes "" | make config
|
||||||
|
|
||||||
|
# build!
|
||||||
|
make ${MAKEFLAGS} uImage modules
|
||||||
|
}
|
||||||
|
|
||||||
|
package_linux-mmp() {
|
||||||
|
pkgdesc="The Linux Kernel and modules for Marvell PXA168/PXA910(MMP) and MMP2 processors"
|
||||||
|
groups=('base')
|
||||||
|
depends=('coreutils' 'linux-firmware' 'module-init-tools>=3.16' 'mkinitcpio>=0.7')
|
||||||
|
optdepends=('crda: to set the correct wireless channels of your country')
|
||||||
|
provides=('kernel26' 'aufs_friendly')
|
||||||
|
conflicts=('kernel26')
|
||||||
|
replaces=('kernel26')
|
||||||
|
install=${pkgname}.install
|
||||||
|
|
||||||
|
cd "${srcdir}/linux-${_basekernel}"
|
||||||
|
|
||||||
|
KARCH=arm
|
||||||
|
|
||||||
|
# get kernel version
|
||||||
|
_kernver="$(make kernelrelease)"
|
||||||
|
|
||||||
|
mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
|
||||||
|
make INSTALL_MOD_PATH="${pkgdir}" modules_install
|
||||||
|
cp arch/$KARCH/boot/uImage "${pkgdir}/boot/uImage"
|
||||||
|
|
||||||
|
# set correct depmod command for install
|
||||||
|
sed \
|
||||||
|
-e "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/g" \
|
||||||
|
-e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
|
||||||
|
-i "${startdir}/${pkgname}.install"
|
||||||
|
|
||||||
|
# remove build and source links
|
||||||
|
rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build}
|
||||||
|
# remove the firmware
|
||||||
|
rm -rf "${pkgdir}/lib/firmware"
|
||||||
|
# gzip -9 all modules to save 100MB of space
|
||||||
|
find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
|
||||||
|
# make room for external modules
|
||||||
|
ln -s "../extramodules-${_basekernel}-${_kernelname:-ARCH}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
|
||||||
|
# add real version for building modules and running depmod from post_install/upgrade
|
||||||
|
mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}-${_kernelname:-ARCH}"
|
||||||
|
echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}-${_kernelname:-ARCH}/version"
|
||||||
|
}
|
||||||
|
|
||||||
|
package_linux-headers-mmp() {
|
||||||
|
pkgdesc="Header files and scripts for building modules for linux kernel for Marvell PXA168/PXA910(MMP) and MMP2 processors"
|
||||||
|
provides=('kernel26-headers')
|
||||||
|
conflicts=('kernel26-headers')
|
||||||
|
replaces=('kernel26-headers')
|
||||||
|
|
||||||
|
mkdir -p "${pkgdir}/lib/modules/${_kernver}"
|
||||||
|
|
||||||
|
cd "${pkgdir}/lib/modules/${_kernver}"
|
||||||
|
ln -sf ../../../usr/src/linux-${_kernver} build
|
||||||
|
|
||||||
|
cd "${srcdir}/linux-${_basekernel}"
|
||||||
|
install -D -m644 Makefile \
|
||||||
|
"${pkgdir}/usr/src/linux-${_kernver}/Makefile"
|
||||||
|
install -D -m644 kernel/Makefile \
|
||||||
|
"${pkgdir}/usr/src/linux-${_kernver}/kernel/Makefile"
|
||||||
|
install -D -m644 .config \
|
||||||
|
"${pkgdir}/usr/src/linux-${_kernver}/.config"
|
||||||
|
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include"
|
||||||
|
|
||||||
|
for i in acpi asm-generic config crypto drm generated linux math-emu \
|
||||||
|
media net pcmcia scsi sound trace video xen; do
|
||||||
|
cp -a include/${i} "${pkgdir}/usr/src/linux-${_kernver}/include/"
|
||||||
|
done
|
||||||
|
|
||||||
|
# copy arch includes for external modules
|
||||||
|
mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH
|
||||||
|
cp -a arch/$KARCH/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/
|
||||||
|
mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/mach-mmp
|
||||||
|
cp -a arch/$KARCH/mach-mmp/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/mach-mmp/
|
||||||
|
mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/plat-pxa
|
||||||
|
cp -a arch/$KARCH/plat-pxa/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/plat-pxa/
|
||||||
|
|
||||||
|
|
||||||
|
# copy files necessary for later builds, like nvidia and vmware
|
||||||
|
cp Module.symvers "${pkgdir}/usr/src/linux-${_kernver}"
|
||||||
|
cp -a scripts "${pkgdir}/usr/src/linux-${_kernver}"
|
||||||
|
|
||||||
|
# fix permissions on scripts dir
|
||||||
|
chmod og-w -R "${pkgdir}/usr/src/linux-${_kernver}/scripts"
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/.tmp_versions"
|
||||||
|
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel"
|
||||||
|
|
||||||
|
cp arch/${KARCH}/Makefile "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"
|
||||||
|
|
||||||
|
if [ "${CARCH}" = "i686" ]; then
|
||||||
|
cp arch/${KARCH}/Makefile_32.cpu "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel/"
|
||||||
|
|
||||||
|
# add headers for lirc package
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video"
|
||||||
|
|
||||||
|
cp drivers/media/video/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/"
|
||||||
|
|
||||||
|
for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102; do
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
|
||||||
|
cp -a drivers/media/video/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# add docbook makefile
|
||||||
|
install -D -m644 Documentation/DocBook/Makefile \
|
||||||
|
"${pkgdir}/usr/src/linux-${_kernver}/Documentation/DocBook/Makefile"
|
||||||
|
|
||||||
|
# add dm headers
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"
|
||||||
|
cp drivers/md/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"
|
||||||
|
|
||||||
|
# add inotify.h
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/linux"
|
||||||
|
cp include/linux/inotify.h "${pkgdir}/usr/src/linux-${_kernver}/include/linux/"
|
||||||
|
|
||||||
|
# add wireless headers
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"
|
||||||
|
cp net/mac80211/*.h "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"
|
||||||
|
|
||||||
|
# add dvb headers for external modules
|
||||||
|
# in reference to:
|
||||||
|
# http://bugs.archlinux.org/task/9912
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core"
|
||||||
|
cp drivers/media/dvb/dvb-core/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/"
|
||||||
|
# and...
|
||||||
|
# http://bugs.archlinux.org/task/11194
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
|
||||||
|
cp include/config/dvb/*.h "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
|
||||||
|
|
||||||
|
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
|
||||||
|
# in reference to:
|
||||||
|
# http://bugs.archlinux.org/task/13146
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||||
|
cp drivers/media/dvb/frontends/lgdt330x.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||||
|
cp drivers/media/video/msp3400-driver.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||||
|
|
||||||
|
# add dvb headers
|
||||||
|
# in reference to:
|
||||||
|
# http://bugs.archlinux.org/task/20402
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb"
|
||||||
|
cp drivers/media/dvb/dvb-usb/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb/"
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends"
|
||||||
|
cp drivers/media/dvb/frontends/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners"
|
||||||
|
cp drivers/media/common/tuners/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners/"
|
||||||
|
|
||||||
|
# add xfs and shmem for aufs building
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs"
|
||||||
|
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/mm"
|
||||||
|
cp fs/xfs/xfs_sb.h "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs/xfs_sb.h"
|
||||||
|
|
||||||
|
# copy in Kconfig files
|
||||||
|
for i in `find . -name "Kconfig*"`; do
|
||||||
|
mkdir -p "${pkgdir}"/usr/src/linux-${_kernver}/`echo ${i} | sed 's|/Kconfig.*||'`
|
||||||
|
cp ${i} "${pkgdir}/usr/src/linux-${_kernver}/${i}"
|
||||||
|
done
|
||||||
|
|
||||||
|
chown -R root.root "${pkgdir}/usr/src/linux-${_kernver}"
|
||||||
|
find "${pkgdir}/usr/src/linux-${_kernver}" -type d -exec chmod 755 {} \;
|
||||||
|
|
||||||
|
# strip scripts directory
|
||||||
|
find "${pkgdir}/usr/src/linux-${_kernver}/scripts" -type f -perm -u+w 2>/dev/null | while read binary ; do
|
||||||
|
case "$(file -bi "${binary}")" in
|
||||||
|
*application/x-sharedlib*) # Libraries (.so)
|
||||||
|
/usr/bin/strip ${STRIP_SHARED} "${binary}";;
|
||||||
|
*application/x-archive*) # Libraries (.a)
|
||||||
|
/usr/bin/strip ${STRIP_STATIC} "${binary}";;
|
||||||
|
*application/x-executable*) # Binaries
|
||||||
|
/usr/bin/strip ${STRIP_BINARIES} "${binary}";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# remove unneeded architectures
|
||||||
|
rm -rf "${pkgdir}"/usr/src/linux-${_kernver}/arch/{alpha,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,mips,microblaze,mn10300,parisc,powerpc,ppc,s390,sh,sh64,sparc,sparc64,um,v850,x86,xtensa}
|
||||||
|
}
|
12
core/linux-mmp/archlinuxarm.patch
Normal file
12
core/linux-mmp/archlinuxarm.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
diff -urN a/arch/arm/mach-mmp/gplugd.c b/arch/arm/mach-mmp/gplugd.c
|
||||||
|
--- a/arch/arm/mach-mmp/gplugd.c 2011-10-24 07:10:05.000000000 +0000
|
||||||
|
+++ b/arch/arm/mach-mmp/gplugd.c 2012-03-25 03:41:20.040796509 +0000
|
||||||
|
@@ -188,7 +188,7 @@
|
||||||
|
pxa168_add_eth(&gplugd_eth_platform_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
-MACHINE_START(SHEEVAD, "PXA168-based GuruPlug Display (gplugD) Platform")
|
||||||
|
+MACHINE_START(GPLUGD, "PXA168-based GuruPlug Display (gplugD) Platform")
|
||||||
|
.map_io = mmp_map_io,
|
||||||
|
.nr_irqs = IRQ_BOARD_START,
|
||||||
|
.init_irq = pxa168_init_irq,
|
70
core/linux-mmp/aufs3-base.patch
Normal file
70
core/linux-mmp/aufs3-base.patch
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
aufs3.1 base patch
|
||||||
|
|
||||||
|
diff --git a/fs/namei.c b/fs/namei.c
|
||||||
|
index 0b3138d..8edad02 100644
|
||||||
|
--- a/fs/namei.c
|
||||||
|
+++ b/fs/namei.c
|
||||||
|
@@ -1748,7 +1748,7 @@ static struct dentry *__lookup_hash(struct qstr *name,
|
||||||
|
* needs parent already locked. Doesn't follow mounts.
|
||||||
|
* SMP-safe.
|
||||||
|
*/
|
||||||
|
-static struct dentry *lookup_hash(struct nameidata *nd)
|
||||||
|
+struct dentry *lookup_hash(struct nameidata *nd)
|
||||||
|
{
|
||||||
|
return __lookup_hash(&nd->last, nd->path.dentry, nd);
|
||||||
|
}
|
||||||
|
diff --git a/fs/splice.c b/fs/splice.c
|
||||||
|
index fa2defa..e3569b0 100644
|
||||||
|
--- a/fs/splice.c
|
||||||
|
+++ b/fs/splice.c
|
||||||
|
@@ -1085,8 +1085,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
|
||||||
|
/*
|
||||||
|
* Attempt to initiate a splice from pipe to file.
|
||||||
|
*/
|
||||||
|
-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||||
|
- loff_t *ppos, size_t len, unsigned int flags)
|
||||||
|
+long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||||
|
+ loff_t *ppos, size_t len, unsigned int flags)
|
||||||
|
{
|
||||||
|
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
|
||||||
|
loff_t *, size_t, unsigned int);
|
||||||
|
@@ -1113,9 +1113,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||||
|
/*
|
||||||
|
* Attempt to initiate a splice from a file to a pipe.
|
||||||
|
*/
|
||||||
|
-static long do_splice_to(struct file *in, loff_t *ppos,
|
||||||
|
- struct pipe_inode_info *pipe, size_t len,
|
||||||
|
- unsigned int flags)
|
||||||
|
+long do_splice_to(struct file *in, loff_t *ppos,
|
||||||
|
+ struct pipe_inode_info *pipe, size_t len,
|
||||||
|
+ unsigned int flags)
|
||||||
|
{
|
||||||
|
ssize_t (*splice_read)(struct file *, loff_t *,
|
||||||
|
struct pipe_inode_info *, size_t, unsigned int);
|
||||||
|
diff --git a/include/linux/namei.h b/include/linux/namei.h
|
||||||
|
index 409328d..40afdc0 100644
|
||||||
|
--- a/include/linux/namei.h
|
||||||
|
+++ b/include/linux/namei.h
|
||||||
|
@@ -84,6 +84,7 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
|
||||||
|
extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
|
||||||
|
int (*open)(struct inode *, struct file *));
|
||||||
|
|
||||||
|
+extern struct dentry *lookup_hash(struct nameidata *nd);
|
||||||
|
extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
|
||||||
|
|
||||||
|
extern int follow_down_one(struct path *);
|
||||||
|
diff --git a/include/linux/splice.h b/include/linux/splice.h
|
||||||
|
index 26e5b61..3ffef2f 100644
|
||||||
|
--- a/include/linux/splice.h
|
||||||
|
+++ b/include/linux/splice.h
|
||||||
|
@@ -91,4 +91,10 @@ extern void splice_shrink_spd(struct pipe_inode_info *,
|
||||||
|
extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
|
||||||
|
|
||||||
|
extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
|
||||||
|
+
|
||||||
|
+extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||||
|
+ loff_t *ppos, size_t len, unsigned int flags);
|
||||||
|
+extern long do_splice_to(struct file *in, loff_t *ppos,
|
||||||
|
+ struct pipe_inode_info *pipe, size_t len,
|
||||||
|
+ unsigned int flags);
|
||||||
|
#endif
|
30151
core/linux-mmp/aufs3-git-extras.patch
Normal file
30151
core/linux-mmp/aufs3-git-extras.patch
Normal file
File diff suppressed because it is too large
Load diff
35
core/linux-mmp/aufs3-kbuild.patch
Normal file
35
core/linux-mmp/aufs3-kbuild.patch
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
aufs3.1 kbuild patch
|
||||||
|
|
||||||
|
diff --git a/fs/Kconfig b/fs/Kconfig
|
||||||
|
index 9fe0b34..c4311f8 100644
|
||||||
|
--- a/fs/Kconfig
|
||||||
|
+++ b/fs/Kconfig
|
||||||
|
@@ -215,6 +215,7 @@ source "fs/pstore/Kconfig"
|
||||||
|
source "fs/sysv/Kconfig"
|
||||||
|
source "fs/ufs/Kconfig"
|
||||||
|
source "fs/exofs/Kconfig"
|
||||||
|
+source "fs/aufs/Kconfig"
|
||||||
|
|
||||||
|
endif # MISC_FILESYSTEMS
|
||||||
|
|
||||||
|
diff --git a/fs/Makefile b/fs/Makefile
|
||||||
|
index afc1096..5c5ac76 100644
|
||||||
|
--- a/fs/Makefile
|
||||||
|
+++ b/fs/Makefile
|
||||||
|
@@ -123,3 +123,4 @@ obj-$(CONFIG_GFS2_FS) += gfs2/
|
||||||
|
obj-$(CONFIG_EXOFS_FS) += exofs/
|
||||||
|
obj-$(CONFIG_CEPH_FS) += ceph/
|
||||||
|
obj-$(CONFIG_PSTORE) += pstore/
|
||||||
|
+obj-$(CONFIG_AUFS_FS) += aufs/
|
||||||
|
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
|
||||||
|
index 619b565..29f386b 100644
|
||||||
|
--- a/include/linux/Kbuild
|
||||||
|
+++ b/include/linux/Kbuild
|
||||||
|
@@ -65,6 +65,7 @@ header-y += atmppp.h
|
||||||
|
header-y += atmsap.h
|
||||||
|
header-y += atmsvc.h
|
||||||
|
header-y += audit.h
|
||||||
|
+header-y += aufs_type.h
|
||||||
|
header-y += auto_fs.h
|
||||||
|
header-y += auto_fs4.h
|
||||||
|
header-y += auxvec.h
|
249
core/linux-mmp/aufs3-standalone.patch
Normal file
249
core/linux-mmp/aufs3-standalone.patch
Normal file
|
@ -0,0 +1,249 @@
|
||||||
|
aufs3.1 standalone patch
|
||||||
|
|
||||||
|
diff --git a/fs/file_table.c b/fs/file_table.c
|
||||||
|
index c322794..2aad244 100644
|
||||||
|
--- a/fs/file_table.c
|
||||||
|
+++ b/fs/file_table.c
|
||||||
|
@@ -443,6 +443,8 @@ void file_sb_list_del(struct file *file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+EXPORT_SYMBOL(file_sb_list_del);
|
||||||
|
+
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
|
||||||
|
/*
|
||||||
|
diff --git a/fs/inode.c b/fs/inode.c
|
||||||
|
index ec79246..46ac6f9 100644
|
||||||
|
--- a/fs/inode.c
|
||||||
|
+++ b/fs/inode.c
|
||||||
|
@@ -65,6 +65,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
|
||||||
|
static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);
|
||||||
|
|
||||||
|
__cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock);
|
||||||
|
+EXPORT_SYMBOL(inode_sb_list_lock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Empty aops. Can be used for the cases where the user does not
|
||||||
|
diff --git a/fs/namei.c b/fs/namei.c
|
||||||
|
index 8edad02..50e8718 100644
|
||||||
|
--- a/fs/namei.c
|
||||||
|
+++ b/fs/namei.c
|
||||||
|
@@ -1752,6 +1752,7 @@ struct dentry *lookup_hash(struct nameidata *nd)
|
||||||
|
{
|
||||||
|
return __lookup_hash(&nd->last, nd->path.dentry, nd);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(lookup_hash);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lookup_one_len - filesystem helper to lookup single pathname component
|
||||||
|
diff --git a/fs/namespace.c b/fs/namespace.c
|
||||||
|
index b4febb2..598a308 100644
|
||||||
|
--- a/fs/namespace.c
|
||||||
|
+++ b/fs/namespace.c
|
||||||
|
@@ -1508,6 +1508,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(iterate_mounts);
|
||||||
|
|
||||||
|
static void cleanup_group_ids(struct vfsmount *mnt, struct vfsmount *end)
|
||||||
|
{
|
||||||
|
diff --git a/fs/notify/group.c b/fs/notify/group.c
|
||||||
|
index 63fc294..6f4adca 100644
|
||||||
|
--- a/fs/notify/group.c
|
||||||
|
+++ b/fs/notify/group.c
|
||||||
|
@@ -22,6 +22,7 @@
|
||||||
|
#include <linux/srcu.h>
|
||||||
|
#include <linux/rculist.h>
|
||||||
|
#include <linux/wait.h>
|
||||||
|
+#include <linux/module.h>
|
||||||
|
|
||||||
|
#include <linux/fsnotify_backend.h>
|
||||||
|
#include "fsnotify.h"
|
||||||
|
@@ -70,6 +71,7 @@ void fsnotify_put_group(struct fsnotify_group *group)
|
||||||
|
if (atomic_dec_and_test(&group->refcnt))
|
||||||
|
fsnotify_destroy_group(group);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(fsnotify_put_group);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a new fsnotify_group and hold a reference for the group returned.
|
||||||
|
@@ -102,3 +104,4 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
|
||||||
|
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(fsnotify_alloc_group);
|
||||||
|
diff --git a/fs/notify/mark.c b/fs/notify/mark.c
|
||||||
|
index e14587d..be6533b 100644
|
||||||
|
--- a/fs/notify/mark.c
|
||||||
|
+++ b/fs/notify/mark.c
|
||||||
|
@@ -112,6 +112,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark)
|
||||||
|
if (atomic_dec_and_test(&mark->refcnt))
|
||||||
|
mark->free_mark(mark);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(fsnotify_put_mark);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Any time a mark is getting freed we end up here.
|
||||||
|
@@ -189,6 +190,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark)
|
||||||
|
if (unlikely(atomic_dec_and_test(&group->num_marks)))
|
||||||
|
fsnotify_final_destroy_group(group);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(fsnotify_destroy_mark);
|
||||||
|
|
||||||
|
void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask)
|
||||||
|
{
|
||||||
|
@@ -276,6 +278,7 @@ err:
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(fsnotify_add_mark);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* clear any marks in a group in which mark->flags & flags is true
|
||||||
|
@@ -331,6 +334,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
|
||||||
|
atomic_set(&mark->refcnt, 1);
|
||||||
|
mark->free_mark = free_mark;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(fsnotify_init_mark);
|
||||||
|
|
||||||
|
static int fsnotify_mark_destroy(void *ignored)
|
||||||
|
{
|
||||||
|
diff --git a/fs/open.c b/fs/open.c
|
||||||
|
index f711921..d742fc0 100644
|
||||||
|
--- a/fs/open.c
|
||||||
|
+++ b/fs/open.c
|
||||||
|
@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
|
||||||
|
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(do_truncate);
|
||||||
|
|
||||||
|
static long do_sys_truncate(const char __user *pathname, loff_t length)
|
||||||
|
{
|
||||||
|
diff --git a/fs/splice.c b/fs/splice.c
|
||||||
|
index e3569b0..9dc07b7 100644
|
||||||
|
--- a/fs/splice.c
|
||||||
|
+++ b/fs/splice.c
|
||||||
|
@@ -1109,6 +1109,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||||
|
|
||||||
|
return splice_write(pipe, out, ppos, len, flags);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(do_splice_from);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt to initiate a splice from a file to a pipe.
|
||||||
|
@@ -1135,6 +1136,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
|
||||||
|
|
||||||
|
return splice_read(in, ppos, pipe, len, flags);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(do_splice_to);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||||
|
diff --git a/security/commoncap.c b/security/commoncap.c
|
||||||
|
index a93b3b7..024282c 100644
|
||||||
|
--- a/security/commoncap.c
|
||||||
|
+++ b/security/commoncap.c
|
||||||
|
@@ -971,3 +971,4 @@ int cap_file_mmap(struct file *file, unsigned long reqprot,
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(cap_file_mmap);
|
||||||
|
diff --git a/security/device_cgroup.c b/security/device_cgroup.c
|
||||||
|
index 4450fbe..2c437e5 100644
|
||||||
|
--- a/security/device_cgroup.c
|
||||||
|
+++ b/security/device_cgroup.c
|
||||||
|
@@ -500,6 +500,7 @@ found:
|
||||||
|
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(__devcgroup_inode_permission);
|
||||||
|
|
||||||
|
int devcgroup_inode_mknod(int mode, dev_t dev)
|
||||||
|
{
|
||||||
|
diff --git a/security/security.c b/security/security.c
|
||||||
|
index d9e1533..466ee5c 100644
|
||||||
|
--- a/security/security.c
|
||||||
|
+++ b/security/security.c
|
||||||
|
@@ -373,6 +373,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
|
||||||
|
return 0;
|
||||||
|
return security_ops->path_rmdir(dir, dentry);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_path_rmdir);
|
||||||
|
|
||||||
|
int security_path_unlink(struct path *dir, struct dentry *dentry)
|
||||||
|
{
|
||||||
|
@@ -389,6 +390,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
|
||||||
|
return 0;
|
||||||
|
return security_ops->path_symlink(dir, dentry, old_name);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_path_symlink);
|
||||||
|
|
||||||
|
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||||
|
struct dentry *new_dentry)
|
||||||
|
@@ -397,6 +399,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||||
|
return 0;
|
||||||
|
return security_ops->path_link(old_dentry, new_dir, new_dentry);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_path_link);
|
||||||
|
|
||||||
|
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||||
|
struct path *new_dir, struct dentry *new_dentry)
|
||||||
|
@@ -415,6 +418,7 @@ int security_path_truncate(struct path *path)
|
||||||
|
return 0;
|
||||||
|
return security_ops->path_truncate(path);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_path_truncate);
|
||||||
|
|
||||||
|
int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
|
||||||
|
mode_t mode)
|
||||||
|
@@ -423,6 +427,7 @@ int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
|
||||||
|
return 0;
|
||||||
|
return security_ops->path_chmod(dentry, mnt, mode);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_path_chmod);
|
||||||
|
|
||||||
|
int security_path_chown(struct path *path, uid_t uid, gid_t gid)
|
||||||
|
{
|
||||||
|
@@ -430,6 +435,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid)
|
||||||
|
return 0;
|
||||||
|
return security_ops->path_chown(path, uid, gid);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_path_chown);
|
||||||
|
|
||||||
|
int security_path_chroot(struct path *path)
|
||||||
|
{
|
||||||
|
@@ -506,6 +512,7 @@ int security_inode_readlink(struct dentry *dentry)
|
||||||
|
return 0;
|
||||||
|
return security_ops->inode_readlink(dentry);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_inode_readlink);
|
||||||
|
|
||||||
|
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||||
|
{
|
||||||
|
@@ -520,6 +527,7 @@ int security_inode_permission(struct inode *inode, int mask)
|
||||||
|
return 0;
|
||||||
|
return security_ops->inode_permission(inode, mask);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_inode_permission);
|
||||||
|
|
||||||
|
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||||
|
{
|
||||||
|
@@ -619,6 +627,7 @@ int security_file_permission(struct file *file, int mask)
|
||||||
|
|
||||||
|
return fsnotify_perm(file, mask);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_file_permission);
|
||||||
|
|
||||||
|
int security_file_alloc(struct file *file)
|
||||||
|
{
|
||||||
|
@@ -646,6 +655,7 @@ int security_file_mmap(struct file *file, unsigned long reqprot,
|
||||||
|
return ret;
|
||||||
|
return ima_file_mmap(file, prot);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(security_file_mmap);
|
||||||
|
|
||||||
|
int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
|
||||||
|
unsigned long prot)
|
12
core/linux-mmp/change-default-console-loglevel.patch
Normal file
12
core/linux-mmp/change-default-console-loglevel.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
diff -upr linux-3.0.orig/kernel/printk.c linux-3.0/kernel/printk.c
|
||||||
|
--- linux-3.0.orig/kernel/printk.c 2011-07-22 05:17:23.000000000 +0300
|
||||||
|
+++ linux-3.0/kernel/printk.c 2011-07-27 14:43:07.000000000 +0300
|
||||||
|
@@ -58,7 +58,7 @@ void asmlinkage __attribute__((weak)) ea
|
||||||
|
|
||||||
|
/* We show everything that is MORE important than this.. */
|
||||||
|
#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
|
||||||
|
-#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
|
||||||
|
+#define DEFAULT_CONSOLE_LOGLEVEL 4 /* anything MORE serious than KERN_DEBUG */
|
||||||
|
|
||||||
|
DECLARE_WAIT_QUEUE_HEAD(log_wait);
|
||||||
|
|
3438
core/linux-mmp/config
Normal file
3438
core/linux-mmp/config
Normal file
File diff suppressed because it is too large
Load diff
24
core/linux-mmp/linux-mmp.install
Normal file
24
core/linux-mmp/linux-mmp.install
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# arg 1: the new package version
|
||||||
|
# arg 2: the old package version
|
||||||
|
|
||||||
|
KERNEL_NAME=-mmp
|
||||||
|
KERNEL_VERSION=3.1.10-1-ARCH
|
||||||
|
|
||||||
|
post_install () {
|
||||||
|
# updating module dependencies
|
||||||
|
echo ">>> Updating module dependencies. Please wait ..."
|
||||||
|
depmod ${KERNEL_VERSION}
|
||||||
|
}
|
||||||
|
|
||||||
|
post_upgrade() {
|
||||||
|
if grep "^[^#]*[[:space:]]/boot" etc/fstab 2>&1 >/dev/null; then
|
||||||
|
if ! grep "[[:space:]]/boot" etc/mtab 2>&1 >/dev/null; then
|
||||||
|
echo "WARNING: /boot appears to be a seperate partition but is not mounted."
|
||||||
|
echo " You probably just broke your system. Congratulations."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# updating module dependencies
|
||||||
|
echo ">>> Updating module dependencies. Please wait ..."
|
||||||
|
depmod ${KERNEL_VERSION}
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
commit 2394d67e446bf616a0885167d5f0d397bdacfdfc
|
||||||
|
Author: Oliver Neukum <oneukum@suse.de>
|
||||||
|
Date: Tue Sep 13 08:42:21 2011 +0200
|
||||||
|
|
||||||
|
USB: add RESET_RESUME for webcams shown to be quirky
|
||||||
|
|
||||||
|
The new runtime PM code has shown that many webcams suffer
|
||||||
|
from a race condition that may crash them upon resume.
|
||||||
|
Runtime PM is especially prone to show the problem because
|
||||||
|
it retains power to the cameras at all times. However
|
||||||
|
system suspension may also crash the devices and retain
|
||||||
|
power to the devices.
|
||||||
|
The only way to solve this problem without races is in
|
||||||
|
usbcore with the RESET_RESUME quirk.
|
||||||
|
|
||||||
|
Signed-off-by: Oliver Neukum <oneukum@suse.de>
|
||||||
|
Signed-off-by: stable <stable@kernel.org>
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
|
||||||
|
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
||||||
|
index 81ce6a8..38f0510 100644
|
||||||
|
--- a/drivers/usb/core/quirks.c
|
||||||
|
+++ b/drivers/usb/core/quirks.c
|
||||||
|
@@ -38,6 +38,24 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
|
/* Creative SB Audigy 2 NX */
|
||||||
|
{ USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
|
+ /* Logitech Webcam C200 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x0802), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
+ /* Logitech Webcam C250 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
+ /* Logitech Webcam B/C500 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
+ /* Logitech Webcam Pro 9000 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
+ /* Logitech Webcam C310 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x081b), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
+ /* Logitech Webcam C270 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
/* Logitech Harmony 700-series */
|
||||||
|
{ USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||||
|
|
||||||
|
@@ -69,6 +87,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
|
{ USB_DEVICE(0x06a3, 0x0006), .driver_info =
|
||||||
|
USB_QUIRK_CONFIG_INTF_STRINGS },
|
||||||
|
|
||||||
|
+ /* Guillemot Webcam Hercules Dualpix Exchange*/
|
||||||
|
+ { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
/* M-Systems Flash Disk Pioneers */
|
||||||
|
{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
|
commit 5b253d88cc6c65a23cefc457a5a4ef139913c5fc
|
||||||
|
Author: Jon Levell <linuxusb@coralbark.net>
|
||||||
|
Date: Thu Sep 29 20:42:52 2011 +0100
|
||||||
|
|
||||||
|
USB: add quirk for Logitech C300 web cam
|
||||||
|
|
||||||
|
My webcam is a Logitech C300 and I get "chipmunk"ed squeaky sound.
|
||||||
|
The following trivial patch fixes it.
|
||||||
|
|
||||||
|
Signed-off-by: Jon Levell <linuxusb@coralbark.net>
|
||||||
|
Cc: stable <stable@kernel.org>
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
|
||||||
|
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
||||||
|
index 38f0510..d6a8d82 100644
|
||||||
|
--- a/drivers/usb/core/quirks.c
|
||||||
|
+++ b/drivers/usb/core/quirks.c
|
||||||
|
@@ -44,6 +44,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
|
/* Logitech Webcam C250 */
|
||||||
|
{ USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
|
+ /* Logitech Webcam C300 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x0805), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
/* Logitech Webcam B/C500 */
|
||||||
|
{ USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
|
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
||||||
|
index d6a8d82..caa1991 100644
|
||||||
|
--- a/drivers/usb/core/quirks.c
|
||||||
|
+++ b/drivers/usb/core/quirks.c
|
||||||
|
@@ -50,6 +50,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
|
/* Logitech Webcam B/C500 */
|
||||||
|
{ USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
|
+ /* Logitech Webcam C600 */
|
||||||
|
+ { USB_DEVICE(0x046d, 0x0808), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
+
|
||||||
|
/* Logitech Webcam Pro 9000 */
|
||||||
|
{ USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME },
|
Loading…
Reference in a new issue