mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge pull request #1728 from CvH/mb_le8_4.12
media_build: update to 20.06.2017
This commit is contained in:
commit
11ea667968
@ -2,135 +2,138 @@
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# V4L/DVB menu
|
||||
#
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_SND_SOC_SI476X is not set
|
||||
# CONFIG_GENERIC_PHY is not set
|
||||
CONFIG_HAVE_CLK=y
|
||||
# CONFIG_SOC_IMX27 is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_BROKEN is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
CONFIG_REGMAP=y
|
||||
# CONFIG_STA2X11 is not set
|
||||
# CONFIG_ARCH_OMAP4 is not set
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_PLAT_S5P is not set
|
||||
CONFIG_USB_ACM=m
|
||||
# CONFIG_ALPHA is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
# CONFIG_ARCH_MMP is not set
|
||||
# CONFIG_SRAM is not set
|
||||
# CONFIG_ARCH_OMAP2 is not set
|
||||
# CONFIG_FB_VIA is not set
|
||||
# CONFIG_MTD is not set
|
||||
# CONFIG_MTK_IOMMU is not set
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_PLAT_S3C24XX is not set
|
||||
# CONFIG_ARM_DMA_USE_IOMMU is not set
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_MFD_TIMBERDALE is not set
|
||||
CONFIG_BITREVERSE=y
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
# CONFIG_TI_ST is not set
|
||||
# CONFIG_SOC_EXYNOS5250 is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_SOC_EXYNOS4212 is not set
|
||||
CONFIG_I2C_MUX=m
|
||||
# CONFIG_MFD_SI476X_CORE is not set
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_PNP=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_REGMAP_MMIO is not set
|
||||
CONFIG_SND_PCM=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_PWM_OMAP_DMTIMER is not set
|
||||
# CONFIG_ARCH_OMAP3 is not set
|
||||
# CONFIG_BROKEN is not set
|
||||
# CONFIG_ARM_DMA_USE_IOMMU is not set
|
||||
CONFIG_HDMI=y
|
||||
CONFIG_LEDS_CLASS_FLASH=y
|
||||
CONFIG_PCI_MSI=y
|
||||
# CONFIG_MTK_IOMMU_V1 is not set
|
||||
# CONFIG_RPMSG is not set
|
||||
# CONFIG_PLAT_S3C24XX is not set
|
||||
# CONFIG_FB_VIA is not set
|
||||
# CONFIG_SND_FM801 is not set
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
# CONFIG_REGULATOR is not set
|
||||
CONFIG_PM=y
|
||||
# CONFIG_ARCH_MEDIATEK is not set
|
||||
# CONFIG_PPC_MPC512x is not set
|
||||
# CONFIG_SPARC64 is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
CONFIG_SND_AC97_CODEC=m
|
||||
CONFIG_SND=y
|
||||
# CONFIG_ARCH_MULTIPLATFORM is not set
|
||||
# CONFIG_ISA is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
# CONFIG_METAG is not set
|
||||
# CONFIG_OMAP2_VRFB is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
# CONFIG_OF is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_PWM_OMAP_DMTIMER is not set
|
||||
CONFIG_RFKILL=m
|
||||
# CONFIG_SONY_LAPTOP is not set
|
||||
# CONFIG_FB_OMAP2 is not set
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_OMAP_IOMMU is not set
|
||||
# CONFIG_SPARC32 is not set
|
||||
# CONFIG_SOC_AM43XX is not set
|
||||
CONFIG_HAS_DMA=y
|
||||
# CONFIG_OMAP_DM_TIMER is not set
|
||||
CONFIG_I2C=y
|
||||
# CONFIG_M32R is not set
|
||||
# CONFIG_SND_ISA is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_ARCH_OMAP3 is not set
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
CONFIG_SND_PCM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_MFD_CORE=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_ARCH_SUNXI is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_PLAT_S5P is not set
|
||||
# CONFIG_OMAP_DM_TIMER is not set
|
||||
# CONFIG_MFD_TIMBERDALE is not set
|
||||
# CONFIG_SND_ISA is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_PCI=y
|
||||
# CONFIG_ARCH_STI is not set
|
||||
# CONFIG_ARCH_RENESAS is not set
|
||||
CONFIG_TTY=y
|
||||
# CONFIG_SND_MIRO is not set
|
||||
# CONFIG_GENERIC_ALLOCATOR is not set
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
# CONFIG_SOC_EXYNOS4412 is not set
|
||||
CONFIG_FIREWIRE=m
|
||||
# CONFIG_ARCH_OMAP2PLUS is not set
|
||||
# CONFIG_VIDEO_V4L1 is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
# CONFIG_GENERIC_PHY is not set
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_NET=y
|
||||
# CONFIG_ARCH_EXYNOS is not set
|
||||
CONFIG_USB=y
|
||||
# CONFIG_ARCH_MESON is not set
|
||||
CONFIG_MMU=y
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
# CONFIG_SND_FM801 is not set
|
||||
# CONFIG_PARPORT is not set
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
# CONFIG_SOC_AM43XX is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_SPARC32 is not set
|
||||
# CONFIG_TI_ST is not set
|
||||
# CONFIG_STA2X11 is not set
|
||||
# CONFIG_MTD is not set
|
||||
CONFIG_USB_ACM=m
|
||||
# CONFIG_ARCH_STM32 is not set
|
||||
CONFIG_SND=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PNP=y
|
||||
# CONFIG_SRAM is not set
|
||||
# CONFIG_SG_SPLIT is not set
|
||||
# CONFIG_SONY_LAPTOP is not set
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
# CONFIG_SOC_IMX27 is not set
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_OF is not set
|
||||
CONFIG_FONT_8x16=y
|
||||
# CONFIG_SOC_EXYNOS5250 is not set
|
||||
CONFIG_ACPI=y
|
||||
# CONFIG_ARCH_MMP is not set
|
||||
CONFIG_FIREWIRE=m
|
||||
# CONFIG_PLAT_M32700UT is not set
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
# CONFIG_PPC_MPC512x is not set
|
||||
CONFIG_X86=y
|
||||
# CONFIG_SND_MIRO is not set
|
||||
# CONFIG_OMAP_IOMMU is not set
|
||||
# CONFIG_ARCH_MULTIPLATFORM is not set
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_PXA27x is not set
|
||||
# CONFIG_MFD_SI476X_CORE is not set
|
||||
# CONFIG_ARM64 is not set
|
||||
# CONFIG_ARCH_OMAP2PLUS is not set
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_FB_OMAP2 is not set
|
||||
# CONFIG_GENERIC_ALLOCATOR is not set
|
||||
# CONFIG_OMAP2_VRFB is not set
|
||||
CONFIG_BITREVERSE=y
|
||||
# CONFIG_BLACKFIN is not set
|
||||
# CONFIG_REGMAP_MMIO is not set
|
||||
CONFIG_RFKILL=m
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_TTY=y
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
CONFIG_LEDS_CLASS=y
|
||||
# CONFIG_MTK_IOMMU is not set
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_METAG is not set
|
||||
CONFIG_REGMAP=y
|
||||
# CONFIG_ARCH_MESON is not set
|
||||
# CONFIG_M32R is not set
|
||||
CONFIG_SND_SOC=y
|
||||
# CONFIG_ARCH_OMAP4 is not set
|
||||
CONFIG_HAS_DMA=y
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_SPARC64 is not set
|
||||
# CONFIG_ARCH_RENESAS is not set
|
||||
# CONFIG_ALPHA is not set
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
CONFIG_FB=y
|
||||
# CONFIG_ARCH_DAVINCI_DM365 is not set
|
||||
# CONFIG_SOC_EXYNOS4412 is not set
|
||||
# CONFIG_ARCH_STI is not set
|
||||
CONFIG_I2C_MUX=m
|
||||
# CONFIG_SND_SOC_SI476X is not set
|
||||
CONFIG_REGMAP_I2C=y
|
||||
CONFIG_I2C_ALGOBIT=y
|
||||
# CONFIG_ARCH_OMAP2 is not set
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_MIPS is not set
|
||||
CONFIG_X86=y
|
||||
CONFIG_EFI=y
|
||||
# CONFIG_SOC_DRA7XX is not set
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_HDMI=y
|
||||
# CONFIG_VIDEO_V4L1 is not set
|
||||
# CONFIG_SG_SPLIT is not set
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_PXA27x is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_PLAT_M32700UT is not set
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
# CONFIG_BLACKFIN is not set
|
||||
CONFIG_NEW_LEDS=y
|
||||
# CONFIG_ARCH_DAVINCI_DM365 is not set
|
||||
# CONFIG_ISA is not set
|
||||
# CONFIG_VIDEO_KERNEL_VERSION is not set
|
||||
CONFIG_MEDIA_SUPPORT=m
|
||||
|
||||
@ -150,6 +153,7 @@ CONFIG_VIDEO_V4L2=m
|
||||
# CONFIG_VIDEO_ADV_DEBUG is not set
|
||||
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
|
||||
CONFIG_VIDEO_TUNER=m
|
||||
CONFIG_V4L2_FWNODE=m
|
||||
CONFIG_VIDEOBUF_GEN=m
|
||||
CONFIG_VIDEOBUF_DMA_SG=m
|
||||
CONFIG_VIDEOBUF_VMALLOC=m
|
||||
@ -202,6 +206,7 @@ CONFIG_RC_LOOPBACK=m
|
||||
CONFIG_IR_GPIO_CIR=m
|
||||
CONFIG_IR_SERIAL=m
|
||||
CONFIG_IR_SERIAL_TRANSMITTER=y
|
||||
# CONFIG_IR_SIR is not set
|
||||
CONFIG_MEDIA_USB_SUPPORT=y
|
||||
|
||||
#
|
||||
@ -226,7 +231,6 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
|
||||
CONFIG_VIDEO_HDPVR=m
|
||||
CONFIG_VIDEO_USBVISION=m
|
||||
CONFIG_VIDEO_STK1160_COMMON=m
|
||||
# CONFIG_VIDEO_STK1160_AC97 is not set
|
||||
CONFIG_VIDEO_STK1160=m
|
||||
CONFIG_VIDEO_GO7007=m
|
||||
CONFIG_VIDEO_GO7007_USB=m
|
||||
@ -290,6 +294,8 @@ CONFIG_DVB_USB_TBS5220=m
|
||||
CONFIG_DVB_USB_TBS5881=m
|
||||
CONFIG_DVB_USB_TBS5520=m
|
||||
CONFIG_DVB_USB_TBS5927=m
|
||||
CONFIG_DVB_USB_TBS5520SE=m
|
||||
CONFIG_DVB_USB_CYCITV=m
|
||||
CONFIG_DVB_USB_V2=m
|
||||
CONFIG_DVB_USB_AF9015=m
|
||||
CONFIG_DVB_USB_AF9035=m
|
||||
@ -303,6 +309,7 @@ CONFIG_DVB_USB_LME2510=m
|
||||
CONFIG_DVB_USB_MXL111SF=m
|
||||
CONFIG_DVB_USB_RTL28XXU=m
|
||||
CONFIG_DVB_USB_DVBSKY=m
|
||||
CONFIG_DVB_USB_ZD1301=m
|
||||
CONFIG_DVB_TTUSB_BUDGET=m
|
||||
CONFIG_DVB_TTUSB_DEC=m
|
||||
CONFIG_SMS_USB_DRV=m
|
||||
@ -460,6 +467,7 @@ CONFIG_VIDEO_CX25840=m
|
||||
#
|
||||
# Camera sensor devices
|
||||
#
|
||||
CONFIG_VIDEO_OV2640=m
|
||||
CONFIG_VIDEO_OV7640=m
|
||||
CONFIG_VIDEO_MT9V011=m
|
||||
|
||||
@ -565,6 +573,7 @@ CONFIG_DVB_CX24120=m
|
||||
CONFIG_DVB_SI21XX=m
|
||||
CONFIG_DVB_TS2020=m
|
||||
CONFIG_DVB_DS3000=m
|
||||
CONFIG_DVB_DS3K=m
|
||||
CONFIG_DVB_MB86A16=m
|
||||
CONFIG_DVB_TDA10071=m
|
||||
|
||||
@ -593,6 +602,7 @@ CONFIG_DVB_RTL2830=m
|
||||
CONFIG_DVB_RTL2832=m
|
||||
CONFIG_DVB_SI2168=m
|
||||
CONFIG_DVB_AS102_FE=m
|
||||
CONFIG_DVB_ZD1301_DEMOD=m
|
||||
CONFIG_DVB_GP8PSK_FE=m
|
||||
|
||||
#
|
||||
@ -660,6 +670,7 @@ CONFIG_DVB_TAS2101=m
|
||||
CONFIG_DVB_AVL6882=m
|
||||
CONFIG_DVB_STV0910=m
|
||||
CONFIG_DVB_MXL5XX=m
|
||||
CONFIG_DVB_SI2183=m
|
||||
|
||||
#
|
||||
# Tools to develop new frontends
|
||||
|
@ -2,135 +2,138 @@
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# V4L/DVB menu
|
||||
#
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_SND_SOC_SI476X is not set
|
||||
# CONFIG_GENERIC_PHY is not set
|
||||
CONFIG_HAVE_CLK=y
|
||||
# CONFIG_SOC_IMX27 is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_BROKEN is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
CONFIG_REGMAP=y
|
||||
# CONFIG_STA2X11 is not set
|
||||
# CONFIG_ARCH_OMAP4 is not set
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_PLAT_S5P is not set
|
||||
CONFIG_USB_ACM=m
|
||||
# CONFIG_ALPHA is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
# CONFIG_ARCH_MMP is not set
|
||||
# CONFIG_SRAM is not set
|
||||
# CONFIG_ARCH_OMAP2 is not set
|
||||
# CONFIG_FB_VIA is not set
|
||||
# CONFIG_MTD is not set
|
||||
# CONFIG_MTK_IOMMU is not set
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_PLAT_S3C24XX is not set
|
||||
# CONFIG_ARM_DMA_USE_IOMMU is not set
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_MFD_TIMBERDALE is not set
|
||||
CONFIG_BITREVERSE=y
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
# CONFIG_TI_ST is not set
|
||||
# CONFIG_SOC_EXYNOS5250 is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_SOC_EXYNOS4212 is not set
|
||||
CONFIG_I2C_MUX=m
|
||||
# CONFIG_MFD_SI476X_CORE is not set
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_PNP=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_REGMAP_MMIO is not set
|
||||
CONFIG_SND_PCM=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_PWM_OMAP_DMTIMER is not set
|
||||
# CONFIG_ARCH_OMAP3 is not set
|
||||
# CONFIG_BROKEN is not set
|
||||
# CONFIG_ARM_DMA_USE_IOMMU is not set
|
||||
CONFIG_HDMI=y
|
||||
CONFIG_LEDS_CLASS_FLASH=y
|
||||
CONFIG_PCI_MSI=y
|
||||
# CONFIG_MTK_IOMMU_V1 is not set
|
||||
# CONFIG_RPMSG is not set
|
||||
# CONFIG_PLAT_S3C24XX is not set
|
||||
# CONFIG_FB_VIA is not set
|
||||
# CONFIG_SND_FM801 is not set
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
# CONFIG_REGULATOR is not set
|
||||
CONFIG_PM=y
|
||||
# CONFIG_ARCH_MEDIATEK is not set
|
||||
# CONFIG_PPC_MPC512x is not set
|
||||
# CONFIG_SPARC64 is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
CONFIG_SND_AC97_CODEC=m
|
||||
CONFIG_SND=y
|
||||
# CONFIG_ARCH_MULTIPLATFORM is not set
|
||||
# CONFIG_ISA is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
# CONFIG_METAG is not set
|
||||
# CONFIG_OMAP2_VRFB is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
# CONFIG_OF is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_PWM_OMAP_DMTIMER is not set
|
||||
CONFIG_RFKILL=m
|
||||
# CONFIG_SONY_LAPTOP is not set
|
||||
# CONFIG_FB_OMAP2 is not set
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_OMAP_IOMMU is not set
|
||||
# CONFIG_SPARC32 is not set
|
||||
# CONFIG_SOC_AM43XX is not set
|
||||
CONFIG_HAS_DMA=y
|
||||
# CONFIG_OMAP_DM_TIMER is not set
|
||||
CONFIG_I2C=y
|
||||
# CONFIG_M32R is not set
|
||||
# CONFIG_SND_ISA is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_ARCH_OMAP3 is not set
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
CONFIG_SND_PCM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_MFD_CORE=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_ARCH_SUNXI is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_PLAT_S5P is not set
|
||||
# CONFIG_OMAP_DM_TIMER is not set
|
||||
# CONFIG_MFD_TIMBERDALE is not set
|
||||
# CONFIG_SND_ISA is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_PCI=y
|
||||
# CONFIG_ARCH_STI is not set
|
||||
# CONFIG_ARCH_RENESAS is not set
|
||||
CONFIG_TTY=y
|
||||
# CONFIG_SND_MIRO is not set
|
||||
# CONFIG_GENERIC_ALLOCATOR is not set
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
# CONFIG_SOC_EXYNOS4412 is not set
|
||||
CONFIG_FIREWIRE=m
|
||||
# CONFIG_ARCH_OMAP2PLUS is not set
|
||||
# CONFIG_VIDEO_V4L1 is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
# CONFIG_GENERIC_PHY is not set
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_NET=y
|
||||
# CONFIG_ARCH_EXYNOS is not set
|
||||
CONFIG_USB=y
|
||||
# CONFIG_ARCH_MESON is not set
|
||||
CONFIG_MMU=y
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
# CONFIG_SND_FM801 is not set
|
||||
# CONFIG_PARPORT is not set
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
# CONFIG_SOC_AM43XX is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_SPARC32 is not set
|
||||
# CONFIG_TI_ST is not set
|
||||
# CONFIG_STA2X11 is not set
|
||||
# CONFIG_MTD is not set
|
||||
CONFIG_USB_ACM=m
|
||||
# CONFIG_ARCH_STM32 is not set
|
||||
CONFIG_SND=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PNP=y
|
||||
# CONFIG_SRAM is not set
|
||||
# CONFIG_SG_SPLIT is not set
|
||||
# CONFIG_SONY_LAPTOP is not set
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
# CONFIG_SOC_IMX27 is not set
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_OF is not set
|
||||
CONFIG_FONT_8x16=y
|
||||
# CONFIG_SOC_EXYNOS5250 is not set
|
||||
CONFIG_ACPI=y
|
||||
# CONFIG_ARCH_MMP is not set
|
||||
CONFIG_FIREWIRE=m
|
||||
# CONFIG_PLAT_M32700UT is not set
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
# CONFIG_PPC_MPC512x is not set
|
||||
CONFIG_X86=y
|
||||
# CONFIG_SND_MIRO is not set
|
||||
# CONFIG_OMAP_IOMMU is not set
|
||||
# CONFIG_ARCH_MULTIPLATFORM is not set
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_PXA27x is not set
|
||||
# CONFIG_MFD_SI476X_CORE is not set
|
||||
# CONFIG_ARM64 is not set
|
||||
# CONFIG_ARCH_OMAP2PLUS is not set
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_FB_OMAP2 is not set
|
||||
# CONFIG_GENERIC_ALLOCATOR is not set
|
||||
# CONFIG_OMAP2_VRFB is not set
|
||||
CONFIG_BITREVERSE=y
|
||||
# CONFIG_BLACKFIN is not set
|
||||
# CONFIG_REGMAP_MMIO is not set
|
||||
CONFIG_RFKILL=m
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_TTY=y
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
CONFIG_LEDS_CLASS=y
|
||||
# CONFIG_MTK_IOMMU is not set
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_METAG is not set
|
||||
CONFIG_REGMAP=y
|
||||
# CONFIG_ARCH_MESON is not set
|
||||
# CONFIG_M32R is not set
|
||||
CONFIG_SND_SOC=y
|
||||
# CONFIG_ARCH_OMAP4 is not set
|
||||
CONFIG_HAS_DMA=y
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_SPARC64 is not set
|
||||
# CONFIG_ARCH_RENESAS is not set
|
||||
# CONFIG_ALPHA is not set
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
CONFIG_FB=y
|
||||
# CONFIG_ARCH_DAVINCI_DM365 is not set
|
||||
# CONFIG_SOC_EXYNOS4412 is not set
|
||||
# CONFIG_ARCH_STI is not set
|
||||
CONFIG_I2C_MUX=m
|
||||
# CONFIG_SND_SOC_SI476X is not set
|
||||
CONFIG_REGMAP_I2C=y
|
||||
CONFIG_I2C_ALGOBIT=y
|
||||
# CONFIG_ARCH_OMAP2 is not set
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_MIPS is not set
|
||||
CONFIG_X86=y
|
||||
CONFIG_EFI=y
|
||||
# CONFIG_SOC_DRA7XX is not set
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_HDMI=y
|
||||
# CONFIG_VIDEO_V4L1 is not set
|
||||
# CONFIG_SG_SPLIT is not set
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_PXA27x is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_PLAT_M32700UT is not set
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
# CONFIG_BLACKFIN is not set
|
||||
CONFIG_NEW_LEDS=y
|
||||
# CONFIG_ARCH_DAVINCI_DM365 is not set
|
||||
# CONFIG_ISA is not set
|
||||
# CONFIG_VIDEO_KERNEL_VERSION is not set
|
||||
CONFIG_MEDIA_SUPPORT=m
|
||||
|
||||
@ -150,6 +153,7 @@ CONFIG_VIDEO_V4L2=m
|
||||
# CONFIG_VIDEO_ADV_DEBUG is not set
|
||||
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
|
||||
CONFIG_VIDEO_TUNER=m
|
||||
CONFIG_V4L2_FWNODE=m
|
||||
CONFIG_VIDEOBUF_GEN=m
|
||||
CONFIG_VIDEOBUF_VMALLOC=m
|
||||
CONFIG_VIDEOBUF_DVB=m
|
||||
@ -199,6 +203,7 @@ CONFIG_RC_LOOPBACK=m
|
||||
CONFIG_IR_GPIO_CIR=m
|
||||
CONFIG_IR_SERIAL=m
|
||||
CONFIG_IR_SERIAL_TRANSMITTER=y
|
||||
# CONFIG_IR_SIR is not set
|
||||
CONFIG_MEDIA_USB_SUPPORT=y
|
||||
|
||||
#
|
||||
@ -223,7 +228,6 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
|
||||
CONFIG_VIDEO_HDPVR=m
|
||||
CONFIG_VIDEO_USBVISION=m
|
||||
CONFIG_VIDEO_STK1160_COMMON=m
|
||||
# CONFIG_VIDEO_STK1160_AC97 is not set
|
||||
CONFIG_VIDEO_STK1160=m
|
||||
CONFIG_VIDEO_GO7007=m
|
||||
CONFIG_VIDEO_GO7007_USB=m
|
||||
@ -287,6 +291,8 @@ CONFIG_DVB_USB_TBS5220=m
|
||||
CONFIG_DVB_USB_TBS5881=m
|
||||
CONFIG_DVB_USB_TBS5520=m
|
||||
CONFIG_DVB_USB_TBS5927=m
|
||||
CONFIG_DVB_USB_TBS5520SE=m
|
||||
CONFIG_DVB_USB_CYCITV=m
|
||||
CONFIG_DVB_USB_V2=m
|
||||
CONFIG_DVB_USB_AF9015=m
|
||||
CONFIG_DVB_USB_AF9035=m
|
||||
@ -300,6 +306,7 @@ CONFIG_DVB_USB_LME2510=m
|
||||
CONFIG_DVB_USB_MXL111SF=m
|
||||
CONFIG_DVB_USB_RTL28XXU=m
|
||||
CONFIG_DVB_USB_DVBSKY=m
|
||||
CONFIG_DVB_USB_ZD1301=m
|
||||
CONFIG_DVB_TTUSB_BUDGET=m
|
||||
CONFIG_DVB_TTUSB_DEC=m
|
||||
CONFIG_SMS_USB_DRV=m
|
||||
@ -383,6 +390,7 @@ CONFIG_VIDEO_CX25840=m
|
||||
#
|
||||
# Camera sensor devices
|
||||
#
|
||||
CONFIG_VIDEO_OV2640=m
|
||||
CONFIG_VIDEO_OV7640=m
|
||||
CONFIG_VIDEO_MT9V011=m
|
||||
|
||||
@ -479,6 +487,7 @@ CONFIG_DVB_CX24120=m
|
||||
CONFIG_DVB_SI21XX=m
|
||||
CONFIG_DVB_TS2020=m
|
||||
CONFIG_DVB_DS3000=m
|
||||
CONFIG_DVB_DS3K=m
|
||||
CONFIG_DVB_TDA10071=m
|
||||
|
||||
#
|
||||
@ -503,6 +512,7 @@ CONFIG_DVB_RTL2830=m
|
||||
CONFIG_DVB_RTL2832=m
|
||||
CONFIG_DVB_SI2168=m
|
||||
CONFIG_DVB_AS102_FE=m
|
||||
CONFIG_DVB_ZD1301_DEMOD=m
|
||||
CONFIG_DVB_GP8PSK_FE=m
|
||||
|
||||
#
|
||||
@ -564,6 +574,7 @@ CONFIG_DVB_AF9033=m
|
||||
CONFIG_DVB_TAS2101=m
|
||||
CONFIG_DVB_AVL6882=m
|
||||
CONFIG_DVB_STV0910=m
|
||||
CONFIG_DVB_SI2183=m
|
||||
|
||||
#
|
||||
# Tools to develop new frontends
|
||||
@ -579,6 +590,7 @@ CONFIG_MISC_DEVICES=y
|
||||
CONFIG_ALTERA_STAPL=m
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
# RPi DVB Hat
|
||||
CONFIG_DVB_CXD2820R=m
|
||||
CONFIG_DVB_CXD2841ER=m
|
||||
CONFIG_DVB_CXD2880=m
|
||||
|
@ -1,6 +1,6 @@
|
||||
################################################################################
|
||||
# This file is part of LibreELEC - https://libreelec.tv
|
||||
# Copyright (C) 2016-2017 Team LibreELEC
|
||||
# Copyright (C) 2016-present Team LibreELEC
|
||||
#
|
||||
# LibreELEC is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="media_build"
|
||||
PKG_VERSION="2017-01-22-rpi"
|
||||
PKG_VERSION="2017-06-20-rpi"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/crazycat69/linux_media"
|
||||
|
@ -1,20 +1,17 @@
|
||||
--- a/backports/backports.txt
|
||||
+++ b/backports/backports.txt
|
||||
@@ -25,6 +25,17 @@
|
||||
@@ -25,6 +25,14 @@ add api_version.patch
|
||||
add pr_fmt.patch
|
||||
add debug.patch
|
||||
add drx39xxj.patch
|
||||
+add linux-202-lnbp22_patch_for_more_power_if_rotor.patch
|
||||
+add linux-203-stb0899_enable_low_symbol_rate.patch
|
||||
+add linux-222-stb0899_signal_quality.patch
|
||||
+add linux-052-XBOX_remote_support.patch
|
||||
+add linux-054-nuvoton_revert_d7b290a1056c5564eec8a1b169c6e84ff3.6.114c13.patch
|
||||
+add linux-057-Removed-MCE-customer-code-restriction-in-rc6-decode.patch
|
||||
+add linux-062-imon_pad_ignore_diagonal.patch
|
||||
+add linux-063-fix-rc-raw-decoder-loading.patch
|
||||
+add linux-240-pctv452e_kernel_oops_in_4.9.patch
|
||||
+add linux-220-cx231xx-suspend-fix.patch
|
||||
+add linux-202-lnbp22_patch_for_more_power_if_rotor.patch
|
||||
+add linux-203-stb0899_enable_low_symbol_rate.patch
|
||||
+add linux-220-hauppauge_dualhd_second_tuner_support.patch
|
||||
+add cxd2880-support.patch
|
||||
|
||||
[4.8.255]
|
||||
add v4.8_user_pages_flag.patch
|
||||
|
||||
[4.10.255]
|
||||
add v4.10_sched_signal.patch
|
||||
|
@ -1,13 +0,0 @@
|
||||
make config and make menuconfig work now
|
||||
|
||||
--- a/v4l/Kconfig.staging
|
||||
+++ b/v4l/Kconfig.staging
|
||||
@@ -27,7 +27,7 @@ menu "Media devices in staging"
|
||||
config STAGING_BROKEN
|
||||
bool "Enable drivers that are known to not compile"
|
||||
default n
|
||||
- --- help ---
|
||||
+ ---help---
|
||||
Say N here, except if you will be fixing the drivers
|
||||
compilation.
|
||||
|
@ -1,10 +1,13 @@
|
||||
diff -Naur linux-3.9.4/drivers/staging/media/lirc/Kconfig linux-3.9.4.patch/drivers/staging/media/lirc/Kconfig
|
||||
--- linux-3.9.4/drivers/staging/media/lirc/Kconfig 2013-05-24 20:45:59.000000000 +0200
|
||||
+++ linux-3.9.4.patch/drivers/staging/media/lirc/Kconfig 2013-05-30 18:18:57.238957100 +0200
|
||||
@@ -63,10 +63,17 @@
|
||||
Subject: linux-052-XBOX_remote_support updated for kernel 4.11
|
||||
|
||||
diff --git a/drivers/staging/media/lirc/Kconfig b/drivers/staging/media/lirc/Kconfig
|
||||
index bc67da2..87d894e 100644
|
||||
--- a/drivers/staging/media/lirc/Kconfig
|
||||
+++ b/drivers/staging/media/lirc/Kconfig
|
||||
@@ -24,10 +24,17 @@ config LIRC_SIR
|
||||
help
|
||||
Driver for the SIR IrDA port
|
||||
|
||||
|
||||
+config LIRC_XBOX
|
||||
+ tristate "XBOX USB IR Remote"
|
||||
+ depends on LIRC && USB
|
||||
@ -19,9 +22,22 @@ diff -Naur linux-3.9.4/drivers/staging/media/lirc/Kconfig linux-3.9.4.patch/driv
|
||||
PVR-150/500, HVR-1200/1250/1700/1800, HD-PVR and other cards
|
||||
+
|
||||
endif
|
||||
diff -Naur linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c linux-3.9.4.patch/drivers/staging/media/lirc/lirc_xbox.c
|
||||
--- linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ linux-3.9.4.patch/drivers/staging/media/lirc/lirc_xbox.c 2013-05-30 18:40:22.523775446 +0200
|
||||
diff --git a/drivers/staging/media/lirc/Makefile b/drivers/staging/media/lirc/Makefile
|
||||
index 28740c9..b3e331e4 100644
|
||||
--- a/drivers/staging/media/lirc/Makefile
|
||||
+++ b/drivers/staging/media/lirc/Makefile
|
||||
@@ -3,4 +3,5 @@
|
||||
|
||||
# Each configuration option enables a list of files.
|
||||
|
||||
+obj-$(CONFIG_LIRC_XBOX) += lirc_xbox.o
|
||||
obj-$(CONFIG_LIRC_ZILOG) += lirc_zilog.o
|
||||
|
||||
diff --git a/drivers/staging/media/lirc/lirc_xbox.c b/drivers/staging/media/lirc/lirc_xbox.c
|
||||
new file mode 100644
|
||||
index 0000000..c269d5d
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/media/lirc/lirc_xbox.c
|
||||
@@ -0,0 +1,995 @@
|
||||
+/*
|
||||
+ * lirc_xbox - USB remote support for LIRC
|
||||
@ -1018,12 +1034,6 @@ diff -Naur linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c linux-3.9.4.patch/
|
||||
+
|
||||
+module_param(repeat, uint, S_IRUGO | S_IWUSR);
|
||||
+MODULE_PARM_DESC(repeat, "Repeat timeout (1/100 sec) (default: 10)");
|
||||
diff -Naur linux-3.9.4/drivers/staging/media/lirc/Makefile linux-3.9.4.patch/drivers/staging/media/lirc/Makefile
|
||||
--- linux-3.9.4/drivers/staging/media/lirc/Makefile 2013-05-24 20:45:59.000000000 +0200
|
||||
+++ linux-3.9.4.patch/drivers/staging/media/lirc/Makefile 2013-05-30 18:17:39.163634834 +0200
|
||||
@@ -10,4 +10,5 @@
|
||||
obj-$(CONFIG_LIRC_SASEM) += lirc_sasem.o
|
||||
obj-$(CONFIG_LIRC_SERIAL) += lirc_serial.o
|
||||
obj-$(CONFIG_LIRC_SIR) += lirc_sir.o
|
||||
+obj-$(CONFIG_LIRC_XBOX) += lirc_xbox.o
|
||||
obj-$(CONFIG_LIRC_ZILOG) += lirc_zilog.o
|
||||
--
|
||||
2.7.4
|
||||
|
||||
|
@ -1,46 +0,0 @@
|
||||
From d13ee07f431c94ea72320ea4136e75ebeaee98c1 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Reichl <hias@horus.com>
|
||||
Date: Fri, 3 Mar 2017 10:27:44 +0100
|
||||
Subject: [PATCH] backport: rc: raw decoder for keymap protocol is not loaded
|
||||
on register
|
||||
|
||||
see http://www.spinics.net/lists/linux-media/msg111651.html
|
||||
---
|
||||
drivers/media/rc/rc-main.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
|
||||
index dedaf38..9a397da 100644
|
||||
--- a/drivers/media/rc/rc-main.c
|
||||
+++ b/drivers/media/rc/rc-main.c
|
||||
@@ -1441,6 +1441,7 @@ int rc_register_device(struct rc_dev *dev)
|
||||
int attr = 0;
|
||||
int minor;
|
||||
int rc;
|
||||
+ u64 rc_type;
|
||||
|
||||
if (!dev || !dev->map_name)
|
||||
return -EINVAL;
|
||||
@@ -1526,14 +1527,18 @@ int rc_register_device(struct rc_dev *dev)
|
||||
goto out_input;
|
||||
}
|
||||
|
||||
+ rc_type = BIT_ULL(rc_map->rc_type);
|
||||
+
|
||||
if (dev->change_protocol) {
|
||||
- u64 rc_type = (1ll << rc_map->rc_type);
|
||||
rc = dev->change_protocol(dev, &rc_type);
|
||||
if (rc < 0)
|
||||
goto out_raw;
|
||||
dev->enabled_protocols = rc_type;
|
||||
}
|
||||
|
||||
+ if (dev->driver_type == RC_DRIVER_IR_RAW)
|
||||
+ ir_raw_load_modules(&rc_type);
|
||||
+
|
||||
/* Allow the RC sysfs nodes to be accessible */
|
||||
atomic_set(&dev->initialized, 1);
|
||||
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,31 +0,0 @@
|
||||
drop at next major media_build bump
|
||||
fixes https://github.com/tbsdtv/linux_media/issues/40
|
||||
|
||||
From f10b80837b205be12e3b511a14c184f1873ce1d6 Mon Sep 17 00:00:00 2001
|
||||
From: CrazyCat <crazycat69@narod.ru>
|
||||
Date: Fri, 31 Mar 2017 01:04:42 +0300
|
||||
Subject: [PATCH] cx231xx-dvb: Fixed merge issue in unregister_dvb().
|
||||
|
||||
---
|
||||
drivers/media/usb/cx231xx/cx231xx-dvb.c | 8 --------
|
||||
1 file changed, 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
|
||||
index 593be48..fb477e9 100644
|
||||
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
|
||||
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
|
||||
@@ -755,14 +755,6 @@ static void unregister_dvb(struct cx231xx_dvb *dvb)
|
||||
}
|
||||
dvb_unregister_frontend(dvb->frontend);
|
||||
dvb_frontend_detach(dvb->frontend);
|
||||
-
|
||||
- client = dvb->i2c_client_demod;
|
||||
- /* remove I2C demod */
|
||||
- if (client) {
|
||||
- module_put(client->dev.driver->owner);
|
||||
- i2c_unregister_device(client);
|
||||
- }
|
||||
-
|
||||
dvb_unregister_adapter(&dvb->adapter);
|
||||
}
|
||||
|
@ -0,0 +1,586 @@
|
||||
From: Brad Love <hidden@email.co>
|
||||
Date: Sun, 16 Apr 2017 00:13:39 -0500
|
||||
Subject: Hauppauge DualHD DVB/ATSC second tuner support
|
||||
|
||||
diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c
|
||||
index c9b1eb3..c50769f 100644
|
||||
--- a/drivers/media/dvb-frontends/lgdt3306a.c
|
||||
+++ b/drivers/media/dvb-frontends/lgdt3306a.c
|
||||
@@ -624,6 +624,9 @@ static int lgdt3306a_set_modulation(struct lgdt3306a_state *state,
|
||||
case QAM_256:
|
||||
ret = lgdt3306a_set_qam(state, QAM_256);
|
||||
break;
|
||||
+ case QAM_AUTO:
|
||||
+ ret = lgdt3306a_set_qam(state, QAM_64);
|
||||
+ break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -649,6 +652,7 @@ static int lgdt3306a_agc_setup(struct lgdt3306a_state *state,
|
||||
break;
|
||||
case QAM_64:
|
||||
case QAM_256:
|
||||
+ case QAM_AUTO:
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -703,6 +707,7 @@ static int lgdt3306a_spectral_inversion(struct lgdt3306a_state *state,
|
||||
break;
|
||||
case QAM_64:
|
||||
case QAM_256:
|
||||
+ case QAM_AUTO:
|
||||
/* Auto ok for QAM */
|
||||
ret = lgdt3306a_set_inversion_auto(state, 1);
|
||||
break;
|
||||
@@ -726,6 +731,7 @@ static int lgdt3306a_set_if(struct lgdt3306a_state *state,
|
||||
break;
|
||||
case QAM_64:
|
||||
case QAM_256:
|
||||
+ case QAM_AUTO:
|
||||
if_freq_khz = state->cfg->qam_if_khz;
|
||||
break;
|
||||
default:
|
||||
@@ -1644,6 +1650,9 @@ static int lgdt3306a_read_signal_strength(struct dvb_frontend *fe,
|
||||
case QAM_256:
|
||||
ref_snr = 2800; /* 28dB */
|
||||
break;
|
||||
+ case QAM_AUTO:
|
||||
+ ref_snr = 2200; /* 22dB */
|
||||
+ break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
|
||||
index 146341a..d2e5b8d 100644
|
||||
--- a/drivers/media/usb/em28xx/em28xx-cards.c
|
||||
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
|
||||
@@ -508,8 +508,10 @@ static struct em28xx_reg_seq plex_px_bcud[] = {
|
||||
};
|
||||
|
||||
/*
|
||||
- * 2040:0265 Hauppauge WinTV-dualHD DVB
|
||||
- * 2040:026d Hauppauge WinTV-dualHD ATSC/QAM
|
||||
+ * 2040:0265 Hauppauge WinTV-dualHD DVB ISOC
|
||||
+ * 2040:8265 Hauppauge WinTV-dualHD DVB Bulk
|
||||
+ * 2040:026d Hauppauge WinTV-dualHD ATSC/QAM ISOC
|
||||
+ * 2040:826d Hauppauge WinTV-dualHD ATSC/QAM Bulk
|
||||
* reg 0x80/0x84:
|
||||
* GPIO_0: Yellow LED tuner 1, 0=on, 1=off
|
||||
* GPIO_1: Green LED tuner 1, 0=on, 1=off
|
||||
@@ -2376,7 +2378,8 @@ struct em28xx_board em28xx_boards[] = {
|
||||
.has_dvb = 1,
|
||||
},
|
||||
/*
|
||||
- * 2040:0265 Hauppauge WinTV-dualHD (DVB version).
|
||||
+ * 2040:0265 Hauppauge WinTV-dualHD (DVB version) ISOC.
|
||||
+ * 2040:8265 Hauppauge WinTV-dualHD (DVB version) BULK.
|
||||
* Empia EM28274, 2x Silicon Labs Si2168, 2x Silicon Labs Si2157
|
||||
*/
|
||||
[EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB] = {
|
||||
@@ -2387,11 +2390,13 @@ struct em28xx_board em28xx_boards[] = {
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_gpio = hauppauge_dualhd_dvb,
|
||||
.has_dvb = 1,
|
||||
+ .has_dual_ts = 1,
|
||||
.ir_codes = RC_MAP_HAUPPAUGE,
|
||||
.leds = hauppauge_dualhd_leds,
|
||||
},
|
||||
/*
|
||||
- * 2040:026d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM).
|
||||
+ * 2040:026d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM) ISOC.
|
||||
+ * 2040:826d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM) BULK.
|
||||
* Empia EM28274, 2x LG LGDT3306A, 2x Silicon Labs Si2157
|
||||
*/
|
||||
[EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595] = {
|
||||
@@ -2402,6 +2407,7 @@ struct em28xx_board em28xx_boards[] = {
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_gpio = hauppauge_dualhd_dvb,
|
||||
.has_dvb = 1,
|
||||
+ .has_dual_ts = 1,
|
||||
.ir_codes = RC_MAP_HAUPPAUGE,
|
||||
.leds = hauppauge_dualhd_leds,
|
||||
},
|
||||
@@ -2530,8 +2536,12 @@ struct usb_device_id em28xx_id_table[] = {
|
||||
.driver_info = EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850 },
|
||||
{ USB_DEVICE(0x2040, 0x0265),
|
||||
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
|
||||
+ { USB_DEVICE(0x2040, 0x8265),
|
||||
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
|
||||
{ USB_DEVICE(0x2040, 0x026d),
|
||||
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
|
||||
+ { USB_DEVICE(0x2040, 0x826d),
|
||||
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
|
||||
{ USB_DEVICE(0x0438, 0xb002),
|
||||
.driver_info = EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 },
|
||||
{ USB_DEVICE(0x2001, 0xf112),
|
||||
@@ -3222,7 +3232,8 @@ static void em28xx_release_resources(struct em28xx *dev)
|
||||
em28xx_i2c_unregister(dev, 1);
|
||||
em28xx_i2c_unregister(dev, 0);
|
||||
|
||||
- usb_put_dev(udev);
|
||||
+ if(dev->ts == PRIMARY_TS)
|
||||
+ usb_put_dev(udev);
|
||||
|
||||
/* Mark device as unused */
|
||||
clear_bit(dev->devno, em28xx_devused);
|
||||
@@ -3415,6 +3426,34 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int em28xx_duplicate_dev(struct em28xx *dev)
|
||||
+{
|
||||
+ int nr;
|
||||
+ struct em28xx *sec_dev = kzalloc(sizeof(*sec_dev), GFP_KERNEL);
|
||||
+ if (sec_dev == NULL) {
|
||||
+ dev->dev_next = NULL;
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ memcpy(sec_dev, dev, sizeof(sizeof(*sec_dev)));
|
||||
+ /* Check to see next free device and mark as used */
|
||||
+ do {
|
||||
+ nr = find_first_zero_bit(em28xx_devused, EM28XX_MAXBOARDS);
|
||||
+ if (nr >= EM28XX_MAXBOARDS) {
|
||||
+ /* No free device slots */
|
||||
+ printk(DRIVER_NAME ": Supports only %i em28xx boards.\n",
|
||||
+ EM28XX_MAXBOARDS);
|
||||
+ kfree(sec_dev);
|
||||
+ dev->dev_next = NULL;
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ } while (test_and_set_bit(nr, em28xx_devused));
|
||||
+ sec_dev->devno = nr;
|
||||
+ snprintf(sec_dev->name, 28, "em28xx #%d", nr);
|
||||
+ sec_dev->dev_next = NULL;
|
||||
+ dev->dev_next = sec_dev;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* high bandwidth multiplier, as encoded in highspeed endpoint descriptors */
|
||||
#define hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))
|
||||
|
||||
@@ -3428,7 +3467,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
struct usb_device *udev;
|
||||
struct em28xx *dev = NULL;
|
||||
int retval;
|
||||
- bool has_vendor_audio = false, has_video = false, has_dvb = false;
|
||||
+ bool has_vendor_audio = false, has_video = false;
|
||||
+ bool has_dvb = false, has_dvb_ts2 = false;
|
||||
int i, nr, try_bulk;
|
||||
const int ifnum = interface->altsetting[0].desc.bInterfaceNumber;
|
||||
char *speed;
|
||||
@@ -3534,6 +3574,19 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
}
|
||||
}
|
||||
break;
|
||||
+ case 0x85:
|
||||
+ if (usb_endpoint_xfer_isoc(e)) {
|
||||
+ if (size > dev->dvb_max_pkt_size_isoc_ts2) {
|
||||
+ has_dvb_ts2 = true; /* see NOTE (~) */
|
||||
+ dev->dvb_ep_isoc_ts2 = e->bEndpointAddress;
|
||||
+ dev->dvb_max_pkt_size_isoc_ts2 = size;
|
||||
+ dev->dvb_alt_isoc = i;
|
||||
+ }
|
||||
+ } else {
|
||||
+ has_dvb_ts2 = true;
|
||||
+ dev->dvb_ep_bulk_ts2 = e->bEndpointAddress;
|
||||
+ }
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
/* NOTE:
|
||||
@@ -3615,6 +3668,10 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
dev->has_video = has_video;
|
||||
dev->ifnum = ifnum;
|
||||
|
||||
+ dev->ts = PRIMARY_TS;
|
||||
+ snprintf(dev->name, 28, "em28xx");
|
||||
+ dev->dev_next = NULL;
|
||||
+
|
||||
if (has_vendor_audio) {
|
||||
dev_err(&interface->dev,
|
||||
"Audio interface %i found (Vendor Class)\n", ifnum);
|
||||
@@ -3694,6 +3751,61 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
dev->dvb_xfer_bulk ? "bulk" : "isoc");
|
||||
}
|
||||
|
||||
+ if(dev->board.has_dual_ts && em28xx_duplicate_dev(dev) == 0)
|
||||
+ {
|
||||
+ dev->dev_next->ts = SECONDARY_TS;
|
||||
+ dev->dev_next->alt = -1;
|
||||
+ dev->dev_next->is_audio_only = has_vendor_audio && !(has_video || has_dvb);
|
||||
+ dev->dev_next->has_video = false;
|
||||
+ dev->dev_next->ifnum = ifnum;
|
||||
+ dev->dev_next->model = id->driver_info;
|
||||
+
|
||||
+ mutex_init(&dev->dev_next->lock);
|
||||
+ retval = em28xx_init_dev(dev->dev_next, udev, interface, dev->dev_next->devno);
|
||||
+ if (retval) {
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+
|
||||
+ if (usb_xfer_mode < 0) {
|
||||
+ if (dev->dev_next->board.is_webcam)
|
||||
+ try_bulk = 1;
|
||||
+ else
|
||||
+ try_bulk = 0;
|
||||
+ } else {
|
||||
+ try_bulk = usb_xfer_mode > 0;
|
||||
+ }
|
||||
+
|
||||
+ /* Select USB transfer types to use */
|
||||
+ if (has_dvb) {
|
||||
+ if (!dev->dvb_ep_isoc_ts2 || (try_bulk && dev->dvb_ep_bulk_ts2))
|
||||
+ dev->dev_next->dvb_xfer_bulk = 1;
|
||||
+ dev_info(&dev->intf->dev, "dvb ts2 set to %s mode.\n",
|
||||
+ dev->dev_next->dvb_xfer_bulk ? "bulk" : "isoc");
|
||||
+ }
|
||||
+
|
||||
+ dev->dev_next->dvb_ep_isoc = dev->dvb_ep_isoc_ts2;
|
||||
+ dev->dev_next->dvb_ep_bulk = dev->dvb_ep_bulk_ts2;
|
||||
+ dev->dev_next->dvb_max_pkt_size_isoc = dev->dvb_max_pkt_size_isoc_ts2;
|
||||
+ dev->dev_next->dvb_alt_isoc = dev->dvb_alt_isoc;
|
||||
+
|
||||
+ /* Configuare hardware to support TS2*/
|
||||
+ if(dev->dvb_xfer_bulk) {
|
||||
+ /* The ep4 and ep5 are configuared for BULK */
|
||||
+ em28xx_write_reg(dev, 0x0b, 0x96);
|
||||
+ mdelay(100);
|
||||
+ em28xx_write_reg(dev, 0x0b, 0x80);
|
||||
+ mdelay(100);
|
||||
+ } else {
|
||||
+ /* The ep4 and ep5 are configuared for ISO */
|
||||
+ em28xx_write_reg(dev, 0x0b, 0x96);
|
||||
+ mdelay(100);
|
||||
+ em28xx_write_reg(dev, 0x0b, 0x82);
|
||||
+ mdelay(100);
|
||||
+ }
|
||||
+
|
||||
+ kref_init(&dev->dev_next->ref);
|
||||
+ }
|
||||
+
|
||||
kref_init(&dev->ref);
|
||||
|
||||
request_modules(dev);
|
||||
@@ -3736,15 +3848,28 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
|
||||
if (!dev)
|
||||
return;
|
||||
|
||||
+ if(dev->dev_next!=NULL) {
|
||||
+ dev->dev_next->disconnected = 1;
|
||||
+ dev_info(&dev->intf->dev, "Disconnecting %s\n", dev->dev_next->name);
|
||||
+ flush_request_modules(dev->dev_next);
|
||||
+ }
|
||||
+
|
||||
dev->disconnected = 1;
|
||||
|
||||
- dev_err(&dev->intf->dev, "Disconnecting\n");
|
||||
+ dev_err(&dev->intf->dev, "Disconnecting %s\n", dev->name);
|
||||
|
||||
flush_request_modules(dev);
|
||||
|
||||
em28xx_close_extension(dev);
|
||||
|
||||
+ if(dev->dev_next!=NULL)
|
||||
+ em28xx_release_resources(dev->dev_next);
|
||||
em28xx_release_resources(dev);
|
||||
+
|
||||
+ if(dev->dev_next!=NULL) {
|
||||
+ kref_put(&dev->dev_next->ref, em28xx_free_device);
|
||||
+ dev->dev_next = NULL;
|
||||
+ }
|
||||
kref_put(&dev->ref, em28xx_free_device);
|
||||
}
|
||||
|
||||
diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
|
||||
index 1d0d8cc..ca0ddd5 100644
|
||||
--- a/drivers/media/usb/em28xx/em28xx-core.c
|
||||
+++ b/drivers/media/usb/em28xx/em28xx-core.c
|
||||
@@ -638,10 +638,39 @@ int em28xx_capture_start(struct em28xx *dev, int start)
|
||||
dev->chip_id == CHIP_ID_EM28174 ||
|
||||
dev->chip_id == CHIP_ID_EM28178) {
|
||||
/* The Transport Stream Enable Register moved in em2874 */
|
||||
- rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
|
||||
- start ?
|
||||
- EM2874_TS1_CAPTURE_ENABLE : 0x00,
|
||||
- EM2874_TS1_CAPTURE_ENABLE);
|
||||
+ if(dev->dvb_xfer_bulk) {
|
||||
+ /* TS1 Maximum Transfer Size = 188 * EM28XX_DVB_BULK_PACKET_MULTIPLIER */
|
||||
+ em28xx_write_reg(dev, EM2874_R5D_TS1_PKT_SIZE, 0xef);
|
||||
+ } else {
|
||||
+ /* TS1 Maximum Transfer Size = 188 * 5 */
|
||||
+ em28xx_write_reg(dev, EM2874_R5D_TS1_PKT_SIZE, 0x05);
|
||||
+ }
|
||||
+
|
||||
+ if(dev->board.has_dual_ts) {
|
||||
+ if(start) {
|
||||
+ if(dev->dvb_xfer_bulk) {
|
||||
+ /* TS2 Maximum Transfer Size = 188 * EM28XX_DVB_BULK_PACKET_MULTIPLIER */
|
||||
+ em28xx_write_reg(dev, EM2874_R5E_TS2_PKT_SIZE, 0xef);
|
||||
+ } else {
|
||||
+ /* TS2 Maximum Transfer Size = 188 * 5 */
|
||||
+ em28xx_write_reg(dev, EM2874_R5E_TS2_PKT_SIZE, 0x05);
|
||||
+ }
|
||||
+ rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
|
||||
+ (EM2874_TS1_CAPTURE_ENABLE | EM2874_TS2_CAPTURE_ENABLE),
|
||||
+ (EM2874_TS1_CAPTURE_ENABLE | EM2874_TS2_CAPTURE_ENABLE));
|
||||
+ } else {
|
||||
+ if(dev->ts == PRIMARY_TS) {
|
||||
+ rc = em28xx_toggle_reg_bits(dev, EM2874_R5F_TS_ENABLE, EM2874_TS1_CAPTURE_ENABLE);
|
||||
+ } else {
|
||||
+ rc = em28xx_toggle_reg_bits(dev, EM2874_R5F_TS_ENABLE, EM2874_TS2_CAPTURE_ENABLE);
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
|
||||
+ start ?
|
||||
+ EM2874_TS1_CAPTURE_ENABLE : 0x00,
|
||||
+ EM2874_TS1_CAPTURE_ENABLE);
|
||||
+ }
|
||||
} else {
|
||||
/* FIXME: which is the best order? */
|
||||
/* video registers are sampled by VREF */
|
||||
@@ -1077,7 +1106,11 @@ int em28xx_register_extension(struct em28xx_ops *ops)
|
||||
mutex_lock(&em28xx_devlist_mutex);
|
||||
list_add_tail(&ops->next, &em28xx_extension_devlist);
|
||||
list_for_each_entry(dev, &em28xx_devlist, devlist) {
|
||||
- ops->init(dev);
|
||||
+ if (ops->init) {
|
||||
+ ops->init(dev);
|
||||
+ if(dev->dev_next!=NULL)
|
||||
+ ops->init(dev->dev_next);
|
||||
+ }
|
||||
}
|
||||
mutex_unlock(&em28xx_devlist_mutex);
|
||||
pr_info("em28xx: Registered (%s) extension\n", ops->name);
|
||||
@@ -1091,7 +1124,11 @@ void em28xx_unregister_extension(struct em28xx_ops *ops)
|
||||
|
||||
mutex_lock(&em28xx_devlist_mutex);
|
||||
list_for_each_entry(dev, &em28xx_devlist, devlist) {
|
||||
- ops->fini(dev);
|
||||
+ if (ops->fini) {
|
||||
+ if(dev->dev_next!=NULL)
|
||||
+ ops->fini(dev->dev_next);
|
||||
+ ops->fini(dev);
|
||||
+ }
|
||||
}
|
||||
list_del(&ops->next);
|
||||
mutex_unlock(&em28xx_devlist_mutex);
|
||||
@@ -1106,8 +1143,11 @@ void em28xx_init_extension(struct em28xx *dev)
|
||||
mutex_lock(&em28xx_devlist_mutex);
|
||||
list_add_tail(&dev->devlist, &em28xx_devlist);
|
||||
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
|
||||
- if (ops->init)
|
||||
+ if (ops->init) {
|
||||
ops->init(dev);
|
||||
+ if(dev->dev_next!=NULL)
|
||||
+ ops->init(dev->dev_next);
|
||||
+ }
|
||||
}
|
||||
mutex_unlock(&em28xx_devlist_mutex);
|
||||
}
|
||||
@@ -1118,8 +1158,11 @@ void em28xx_close_extension(struct em28xx *dev)
|
||||
|
||||
mutex_lock(&em28xx_devlist_mutex);
|
||||
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
|
||||
- if (ops->fini)
|
||||
+ if (ops->fini) {
|
||||
+ if(dev->dev_next!=NULL)
|
||||
+ ops->fini(dev->dev_next);
|
||||
ops->fini(dev);
|
||||
+ }
|
||||
}
|
||||
list_del(&dev->devlist);
|
||||
mutex_unlock(&em28xx_devlist_mutex);
|
||||
@@ -1134,6 +1177,8 @@ int em28xx_suspend_extension(struct em28xx *dev)
|
||||
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
|
||||
if (ops->suspend)
|
||||
ops->suspend(dev);
|
||||
+ if(dev->dev_next!=NULL)
|
||||
+ ops->suspend(dev->dev_next);
|
||||
}
|
||||
mutex_unlock(&em28xx_devlist_mutex);
|
||||
return 0;
|
||||
@@ -1148,6 +1193,8 @@ int em28xx_resume_extension(struct em28xx *dev)
|
||||
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
|
||||
if (ops->resume)
|
||||
ops->resume(dev);
|
||||
+ if(dev->dev_next!=NULL)
|
||||
+ ops->resume(dev->dev_next);
|
||||
}
|
||||
mutex_unlock(&em28xx_devlist_mutex);
|
||||
return 0;
|
||||
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
|
||||
index 82edd37..e10b1ac 100644
|
||||
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
|
||||
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
|
||||
@@ -199,13 +199,13 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
|
||||
int rc;
|
||||
struct em28xx_i2c_bus *i2c_bus = dvb->adapter.priv;
|
||||
struct em28xx *dev = i2c_bus->dev;
|
||||
- struct usb_device *udev = interface_to_usbdev(dev->intf);
|
||||
+// struct usb_device *udev = interface_to_usbdev(dev->intf);
|
||||
int dvb_max_packet_size, packet_multiplier, dvb_alt;
|
||||
|
||||
if (dev->dvb_xfer_bulk) {
|
||||
if (!dev->dvb_ep_bulk)
|
||||
return -ENODEV;
|
||||
- dvb_max_packet_size = 512; /* USB 2.0 spec */
|
||||
+ dvb_max_packet_size = 188;
|
||||
packet_multiplier = EM28XX_DVB_BULK_PACKET_MULTIPLIER;
|
||||
dvb_alt = 0;
|
||||
} else { /* isoc */
|
||||
@@ -218,7 +218,8 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
|
||||
dvb_alt = dev->dvb_alt_isoc;
|
||||
}
|
||||
|
||||
- usb_set_interface(udev, dev->ifnum, dvb_alt);
|
||||
+ /* moved to em28xx_dvb_init*/
|
||||
+ //usb_set_interface(udev, dev->ifnum, dvb_alt);
|
||||
rc = em28xx_set_mode(dev, EM28XX_DIGITAL_MODE);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
@@ -1128,8 +1129,9 @@ static void em28xx_unregister_dvb(struct em28xx_dvb *dvb)
|
||||
|
||||
static int em28xx_dvb_init(struct em28xx *dev)
|
||||
{
|
||||
- int result = 0;
|
||||
+ int result = 0, dvb_alt = 0;
|
||||
struct em28xx_dvb *dvb;
|
||||
+ struct usb_device *udev;
|
||||
|
||||
if (dev->is_audio_only) {
|
||||
/* Shouldn't initialize IR for this interface */
|
||||
@@ -1155,7 +1157,7 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
||||
result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
|
||||
dev->dvb_xfer_bulk,
|
||||
EM28XX_DVB_NUM_BUFS,
|
||||
- 512,
|
||||
+ 188,
|
||||
EM28XX_DVB_BULK_PACKET_MULTIPLIER);
|
||||
} else {
|
||||
result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
|
||||
@@ -1913,7 +1915,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
||||
si2168_config.ts_mode = SI2168_TS_SERIAL;
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(info.type, "si2168", I2C_NAME_SIZE);
|
||||
- info.addr = 0x64;
|
||||
+ if(dev->ts == PRIMARY_TS) info.addr = 0x64;
|
||||
+ else info.addr = 0x67;
|
||||
info.platform_data = &si2168_config;
|
||||
request_module(info.type);
|
||||
client = i2c_new_device(&dev->i2c_adap[dev->def_i2c_bus], &info);
|
||||
@@ -1939,7 +1942,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
||||
#endif
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(info.type, "si2157", I2C_NAME_SIZE);
|
||||
- info.addr = 0x60;
|
||||
+ if(dev->ts == PRIMARY_TS) info.addr = 0x60;
|
||||
+ else info.addr = 0x63;
|
||||
info.platform_data = &si2157_config;
|
||||
request_module(info.type);
|
||||
client = i2c_new_device(adapter, &info);
|
||||
@@ -1975,7 +1979,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
||||
lgdt3306a_config.fe = &dvb->fe[0];
|
||||
lgdt3306a_config.i2c_adapter = &adapter;
|
||||
strlcpy(info.type, "lgdt3306a", sizeof(info.type));
|
||||
- info.addr = 0x59;
|
||||
+ if(dev->ts == PRIMARY_TS) info.addr = 0x59;
|
||||
+ else info.addr = 0x0e;
|
||||
info.platform_data = &lgdt3306a_config;
|
||||
request_module(info.type);
|
||||
client = i2c_new_device(&dev->i2c_adap[dev->def_i2c_bus],
|
||||
@@ -2002,7 +2007,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
||||
#endif
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(info.type, "si2157", sizeof(info.type));
|
||||
- info.addr = 0x60;
|
||||
+ if(dev->ts == PRIMARY_TS) info.addr = 0x60;
|
||||
+ else info.addr = 0x62;
|
||||
info.platform_data = &si2157_config;
|
||||
request_module(info.type);
|
||||
|
||||
@@ -2045,6 +2051,14 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
||||
if (result < 0)
|
||||
goto out_free;
|
||||
|
||||
+ if (dev->dvb_xfer_bulk) {
|
||||
+ dvb_alt = 0;
|
||||
+ } else { /* isoc */
|
||||
+ dvb_alt = dev->dvb_alt_isoc;
|
||||
+ }
|
||||
+
|
||||
+ udev = interface_to_usbdev(dev->intf);
|
||||
+ usb_set_interface(udev, dev->ifnum, dvb_alt);
|
||||
dev_info(&dev->intf->dev, "DVB extension successfully initialized\n");
|
||||
|
||||
kref_get(&dev->ref);
|
||||
diff --git a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h
|
||||
index e8d97d5..132638e 100644
|
||||
--- a/drivers/media/usb/em28xx/em28xx.h
|
||||
+++ b/drivers/media/usb/em28xx/em28xx.h
|
||||
@@ -190,7 +190,7 @@
|
||||
USB 2.0 spec says bulk packet size is always 512 bytes
|
||||
*/
|
||||
#define EM28XX_BULK_PACKET_MULTIPLIER 384
|
||||
-#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 384
|
||||
+#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 240
|
||||
|
||||
#define EM28XX_INTERLACED_DEFAULT 1
|
||||
|
||||
@@ -216,6 +216,9 @@
|
||||
/* max. number of button state polling addresses */
|
||||
#define EM28XX_NUM_BUTTON_ADDRESSES_MAX 5
|
||||
|
||||
+#define PRIMARY_TS 0
|
||||
+#define SECONDARY_TS 1
|
||||
+
|
||||
enum em28xx_mode {
|
||||
EM28XX_SUSPEND,
|
||||
EM28XX_ANALOG_MODE,
|
||||
@@ -456,6 +459,7 @@ struct em28xx_board {
|
||||
unsigned int mts_firmware:1;
|
||||
unsigned int max_range_640_480:1;
|
||||
unsigned int has_dvb:1;
|
||||
+ unsigned int has_dual_ts:1;
|
||||
unsigned int is_webcam:1;
|
||||
unsigned int valid:1;
|
||||
unsigned int has_ir_i2c:1;
|
||||
@@ -620,6 +624,7 @@ struct em28xx {
|
||||
unsigned int is_audio_only:1;
|
||||
enum em28xx_int_audio_type int_audio_type;
|
||||
enum em28xx_usb_audio_type usb_audio_type;
|
||||
+ unsigned char name[32];
|
||||
|
||||
struct em28xx_board board;
|
||||
|
||||
@@ -681,6 +686,8 @@ struct em28xx {
|
||||
u8 ifnum; /* number of the assigned usb interface */
|
||||
u8 analog_ep_isoc; /* address of isoc endpoint for analog */
|
||||
u8 analog_ep_bulk; /* address of bulk endpoint for analog */
|
||||
+ u8 dvb_ep_isoc_ts2; /* address of isoc endpoint for DVB TS2*/
|
||||
+ u8 dvb_ep_bulk_ts2; /* address of bulk endpoint for DVB TS2*/
|
||||
u8 dvb_ep_isoc; /* address of isoc endpoint for DVB */
|
||||
u8 dvb_ep_bulk; /* address of bulk endpoint for DVB */
|
||||
int alt; /* alternate setting */
|
||||
@@ -694,6 +701,8 @@ struct em28xx {
|
||||
int dvb_alt_isoc; /* alternate setting for DVB isoc transfers */
|
||||
unsigned int dvb_max_pkt_size_isoc; /* isoc max packet size of the
|
||||
selected DVB ep at dvb_alt */
|
||||
+ unsigned int dvb_max_pkt_size_isoc_ts2; /* isoc max packet size of the
|
||||
+ selected DVB ep at dvb_alt */
|
||||
unsigned int dvb_xfer_bulk:1; /* use bulk instead of isoc
|
||||
transfers for DVB */
|
||||
char urb_buf[URB_MAX_CTRL_SIZE]; /* urb control msg buffer */
|
||||
@@ -725,6 +734,9 @@ struct em28xx {
|
||||
struct media_entity input_ent[MAX_EM28XX_INPUT];
|
||||
struct media_pad input_pad[MAX_EM28XX_INPUT];
|
||||
#endif
|
||||
+
|
||||
+ struct em28xx *dev_next;
|
||||
+ int ts;
|
||||
};
|
||||
|
||||
#define kref_to_dev(d) container_of(d, struct em28xx, ref)
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,61 +0,0 @@
|
||||
--- a/drivers/media/dvb-frontends/stb0899_drv.c
|
||||
+++ b/drivers/media/dvb-frontends/stb0899_drv.c
|
||||
@@ -976,6 +976,16 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
||||
|
||||
*strength = stb0899_table_lookup(stb0899_dvbsrf_tab, ARRAY_SIZE(stb0899_dvbsrf_tab) - 1, val);
|
||||
*strength += 750;
|
||||
+
|
||||
+ const int MIN_STRENGTH_DVBS = 0;
|
||||
+ const int MAX_STRENGTH_DVBS = 680;
|
||||
+ if (*strength < MIN_STRENGTH_DVBS)
|
||||
+ *strength = 0;
|
||||
+ else if(*strength > MAX_STRENGTH_DVBS)
|
||||
+ *strength = 0xFFFF;
|
||||
+ else
|
||||
+ *strength = (*strength - MIN_STRENGTH_DVBS) * 0xFFFF / (MAX_STRENGTH_DVBS - MIN_STRENGTH_DVBS);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "AGCIQVALUE = 0x%02x, C = %d * 0.1 dBm",
|
||||
val & 0xff, *strength);
|
||||
}
|
||||
@@ -988,6 +998,7 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
||||
|
||||
*strength = stb0899_table_lookup(stb0899_dvbs2rf_tab, ARRAY_SIZE(stb0899_dvbs2rf_tab) - 1, val);
|
||||
*strength += 950;
|
||||
+ *strength = *strength << 4;
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm",
|
||||
val & 0x3fff, *strength);
|
||||
}
|
||||
@@ -1021,6 +1032,16 @@ static int stb0899_read_snr(struct dvb_frontend *fe, u16 *snr)
|
||||
val = MAKEWORD16(buf[0], buf[1]);
|
||||
|
||||
*snr = stb0899_table_lookup(stb0899_cn_tab, ARRAY_SIZE(stb0899_cn_tab) - 1, val);
|
||||
+
|
||||
+ const int MIN_SNR_DVBS = 0;
|
||||
+ const int MAX_SNR_DVBS = 200;
|
||||
+ if (*snr < MIN_SNR_DVBS)
|
||||
+ *snr = 0;
|
||||
+ else if(*snr > MAX_SNR_DVBS)
|
||||
+ *snr = 0xFFFF;
|
||||
+ else
|
||||
+ *snr = (*snr - MIN_SNR_DVBS) * 0xFFFF / (MAX_SNR_DVBS - MIN_SNR_DVBS);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "NIR = 0x%02x%02x = %u, C/N = %d * 0.1 dBm\n",
|
||||
buf[0], buf[1], val, *snr);
|
||||
}
|
||||
@@ -1045,6 +1066,16 @@ static int stb0899_read_snr(struct dvb_frontend *fe, u16 *snr)
|
||||
val = (quantn - estn) / 10;
|
||||
}
|
||||
*snr = val;
|
||||
+
|
||||
+ const int MIN_SNR_DVBS2 = 10;
|
||||
+ const int MAX_SNR_DVBS2 = 70;
|
||||
+ if (*snr < MIN_SNR_DVBS2)
|
||||
+ *snr = 0;
|
||||
+ else if(*snr > MAX_SNR_DVBS2)
|
||||
+ *snr = 0xFFFF;
|
||||
+ else
|
||||
+ *snr = (*snr - MIN_SNR_DVBS2) * 0xFFFF / (MAX_SNR_DVBS2 - MIN_SNR_DVBS2);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "Es/N0 quant = %d (%d) estimate = %u (%d), C/N = %d * 0.1 dBm",
|
||||
quant, quantn, est, estn, val);
|
||||
}
|
@ -1,311 +0,0 @@
|
||||
fixes:
|
||||
dvb-usb: found a 'Technotrend TT Connect S2-3600' in warm state.
|
||||
pctv452e: pctv452e_power_ctrl: 1
|
||||
|
||||
Unable to handle kernel NULL pointer dereference at virtual address 00000000
|
||||
pgd = adb60000
|
||||
[00000000] *pgd=00000000
|
||||
Internal error: Oops: 805 [#1] SMP ARM
|
||||
|
||||
fixed in kernel 4.10
|
||||
|
||||
---
|
||||
From 48775cb73c2e26b7ca9d679875a6e570c8b8e124 Mon Sep 17 00:00:00 2001
|
||||
From: Max Kellermann <max.kellermann@gmail.com>
|
||||
Date: Thu, 15 Dec 2016 19:51:07 -0200
|
||||
Subject: [PATCH] [media] pctv452e: move buffer to heap, no mutex
|
||||
|
||||
commit 73d5c5c864f4 ("[media] pctv452e: don't do DMA on stack") caused
|
||||
a NULL pointer dereference which occurs when dvb_usb_init()
|
||||
calls dvb_usb_device_power_ctrl() for the first time, before the
|
||||
frontend has been attached. It also caused a recursive deadlock because
|
||||
tt3650_ci_msg_locked() has already locked the mutex.
|
||||
|
||||
So, partially revert it, but move the buffer to the heap
|
||||
(DMA capable), not to the stack (may not be DMA capable).
|
||||
Instead of sharing one buffer which needs mutex protection,
|
||||
do a new heap allocation for each call.
|
||||
|
||||
Fixes: commit 73d5c5c864f4 ("[media] pctv452e: don't do DMA on stack")
|
||||
|
||||
---
|
||||
drivers/media/usb/dvb-usb/pctv452e.c | 133 +++++++++++++++++++----------------
|
||||
1 file changed, 72 insertions(+), 61 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/usb/dvb-usb/pctv452e.c b/drivers/media/usb/dvb-usb/pctv452e.c
|
||||
index 07fa08b..d54ebe7 100644
|
||||
--- a/drivers/media/usb/dvb-usb/pctv452e.c
|
||||
+++ b/drivers/media/usb/dvb-usb/pctv452e.c
|
||||
@@ -97,14 +97,13 @@ struct pctv452e_state {
|
||||
u8 c; /* transaction counter, wraps around... */
|
||||
u8 initialized; /* set to 1 if 0x15 has been sent */
|
||||
u16 last_rc_key;
|
||||
-
|
||||
- unsigned char data[80];
|
||||
};
|
||||
|
||||
static int tt3650_ci_msg(struct dvb_usb_device *d, u8 cmd, u8 *data,
|
||||
unsigned int write_len, unsigned int read_len)
|
||||
{
|
||||
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
|
||||
+ u8 *buf;
|
||||
u8 id;
|
||||
unsigned int rlen;
|
||||
int ret;
|
||||
@@ -114,36 +113,39 @@ static int tt3650_ci_msg(struct dvb_usb_device *d, u8 cmd, u8 *data,
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
- mutex_lock(&state->ca_mutex);
|
||||
+ buf = kmalloc(64, GFP_KERNEL);
|
||||
+ if (!buf)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
id = state->c++;
|
||||
|
||||
- state->data[0] = SYNC_BYTE_OUT;
|
||||
- state->data[1] = id;
|
||||
- state->data[2] = cmd;
|
||||
- state->data[3] = write_len;
|
||||
+ buf[0] = SYNC_BYTE_OUT;
|
||||
+ buf[1] = id;
|
||||
+ buf[2] = cmd;
|
||||
+ buf[3] = write_len;
|
||||
|
||||
- memcpy(state->data + 4, data, write_len);
|
||||
+ memcpy(buf + 4, data, write_len);
|
||||
|
||||
rlen = (read_len > 0) ? 64 : 0;
|
||||
- ret = dvb_usb_generic_rw(d, state->data, 4 + write_len,
|
||||
- state->data, rlen, /* delay_ms */ 0);
|
||||
+ ret = dvb_usb_generic_rw(d, buf, 4 + write_len,
|
||||
+ buf, rlen, /* delay_ms */ 0);
|
||||
if (0 != ret)
|
||||
goto failed;
|
||||
|
||||
ret = -EIO;
|
||||
- if (SYNC_BYTE_IN != state->data[0] || id != state->data[1])
|
||||
+ if (SYNC_BYTE_IN != buf[0] || id != buf[1])
|
||||
goto failed;
|
||||
|
||||
- memcpy(data, state->data + 4, read_len);
|
||||
+ memcpy(data, buf + 4, read_len);
|
||||
|
||||
- mutex_unlock(&state->ca_mutex);
|
||||
+ kfree(buf);
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
err("CI error %d; %02X %02X %02X -> %*ph.",
|
||||
- ret, SYNC_BYTE_OUT, id, cmd, 3, state->data);
|
||||
+ ret, SYNC_BYTE_OUT, id, cmd, 3, buf);
|
||||
|
||||
- mutex_unlock(&state->ca_mutex);
|
||||
+ kfree(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -410,53 +412,57 @@ static int pctv452e_i2c_msg(struct dvb_usb_device *d, u8 addr,
|
||||
u8 *rcv_buf, u8 rcv_len)
|
||||
{
|
||||
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
|
||||
+ u8 *buf;
|
||||
u8 id;
|
||||
int ret;
|
||||
|
||||
- mutex_lock(&state->ca_mutex);
|
||||
+ buf = kmalloc(64, GFP_KERNEL);
|
||||
+ if (!buf)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
id = state->c++;
|
||||
|
||||
ret = -EINVAL;
|
||||
if (snd_len > 64 - 7 || rcv_len > 64 - 7)
|
||||
goto failed;
|
||||
|
||||
- state->data[0] = SYNC_BYTE_OUT;
|
||||
- state->data[1] = id;
|
||||
- state->data[2] = PCTV_CMD_I2C;
|
||||
- state->data[3] = snd_len + 3;
|
||||
- state->data[4] = addr << 1;
|
||||
- state->data[5] = snd_len;
|
||||
- state->data[6] = rcv_len;
|
||||
+ buf[0] = SYNC_BYTE_OUT;
|
||||
+ buf[1] = id;
|
||||
+ buf[2] = PCTV_CMD_I2C;
|
||||
+ buf[3] = snd_len + 3;
|
||||
+ buf[4] = addr << 1;
|
||||
+ buf[5] = snd_len;
|
||||
+ buf[6] = rcv_len;
|
||||
|
||||
- memcpy(state->data + 7, snd_buf, snd_len);
|
||||
+ memcpy(buf + 7, snd_buf, snd_len);
|
||||
|
||||
- ret = dvb_usb_generic_rw(d, state->data, 7 + snd_len,
|
||||
- state->data, /* rcv_len */ 64,
|
||||
+ ret = dvb_usb_generic_rw(d, buf, 7 + snd_len,
|
||||
+ buf, /* rcv_len */ 64,
|
||||
/* delay_ms */ 0);
|
||||
if (ret < 0)
|
||||
goto failed;
|
||||
|
||||
/* TT USB protocol error. */
|
||||
ret = -EIO;
|
||||
- if (SYNC_BYTE_IN != state->data[0] || id != state->data[1])
|
||||
+ if (SYNC_BYTE_IN != buf[0] || id != buf[1])
|
||||
goto failed;
|
||||
|
||||
/* I2C device didn't respond as expected. */
|
||||
ret = -EREMOTEIO;
|
||||
- if (state->data[5] < snd_len || state->data[6] < rcv_len)
|
||||
+ if (buf[5] < snd_len || buf[6] < rcv_len)
|
||||
goto failed;
|
||||
|
||||
- memcpy(rcv_buf, state->data + 7, rcv_len);
|
||||
- mutex_unlock(&state->ca_mutex);
|
||||
+ memcpy(rcv_buf, buf + 7, rcv_len);
|
||||
|
||||
+ kfree(buf);
|
||||
return rcv_len;
|
||||
|
||||
failed:
|
||||
err("I2C error %d; %02X %02X %02X %02X %02X -> %*ph",
|
||||
ret, SYNC_BYTE_OUT, id, addr << 1, snd_len, rcv_len,
|
||||
- 7, state->data);
|
||||
+ 7, buf);
|
||||
|
||||
- mutex_unlock(&state->ca_mutex);
|
||||
+ kfree(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -505,7 +511,7 @@ static u32 pctv452e_i2c_func(struct i2c_adapter *adapter)
|
||||
static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
|
||||
{
|
||||
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
|
||||
- u8 *rx;
|
||||
+ u8 *b0, *rx;
|
||||
int ret;
|
||||
|
||||
info("%s: %d\n", __func__, i);
|
||||
@@ -516,11 +522,12 @@ static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
|
||||
if (state->initialized)
|
||||
return 0;
|
||||
|
||||
- rx = kmalloc(PCTV_ANSWER_LEN, GFP_KERNEL);
|
||||
- if (!rx)
|
||||
+ b0 = kmalloc(5 + PCTV_ANSWER_LEN, GFP_KERNEL);
|
||||
+ if (!b0)
|
||||
return -ENOMEM;
|
||||
|
||||
- mutex_lock(&state->ca_mutex);
|
||||
+ rx = b0 + 5;
|
||||
+
|
||||
/* hmm where shoud this should go? */
|
||||
ret = usb_set_interface(d->udev, 0, ISOC_INTERFACE_ALTERNATIVE);
|
||||
if (ret != 0)
|
||||
@@ -528,66 +535,70 @@ static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
|
||||
__func__, ret);
|
||||
|
||||
/* this is a one-time initialization, dont know where to put */
|
||||
- state->data[0] = 0xaa;
|
||||
- state->data[1] = state->c++;
|
||||
- state->data[2] = PCTV_CMD_RESET;
|
||||
- state->data[3] = 1;
|
||||
- state->data[4] = 0;
|
||||
+ b0[0] = 0xaa;
|
||||
+ b0[1] = state->c++;
|
||||
+ b0[2] = PCTV_CMD_RESET;
|
||||
+ b0[3] = 1;
|
||||
+ b0[4] = 0;
|
||||
/* reset board */
|
||||
- ret = dvb_usb_generic_rw(d, state->data, 5, rx, PCTV_ANSWER_LEN, 0);
|
||||
+ ret = dvb_usb_generic_rw(d, b0, 5, rx, PCTV_ANSWER_LEN, 0);
|
||||
if (ret)
|
||||
goto ret;
|
||||
|
||||
- state->data[1] = state->c++;
|
||||
- state->data[4] = 1;
|
||||
+ b0[1] = state->c++;
|
||||
+ b0[4] = 1;
|
||||
/* reset board (again?) */
|
||||
- ret = dvb_usb_generic_rw(d, state->data, 5, rx, PCTV_ANSWER_LEN, 0);
|
||||
+ ret = dvb_usb_generic_rw(d, b0, 5, rx, PCTV_ANSWER_LEN, 0);
|
||||
if (ret)
|
||||
goto ret;
|
||||
|
||||
state->initialized = 1;
|
||||
|
||||
ret:
|
||||
- mutex_unlock(&state->ca_mutex);
|
||||
- kfree(rx);
|
||||
+ kfree(b0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int pctv452e_rc_query(struct dvb_usb_device *d)
|
||||
{
|
||||
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
|
||||
+ u8 *b, *rx;
|
||||
int ret, i;
|
||||
u8 id;
|
||||
|
||||
- mutex_lock(&state->ca_mutex);
|
||||
+ b = kmalloc(CMD_BUFFER_SIZE + PCTV_ANSWER_LEN, GFP_KERNEL);
|
||||
+ if (!b)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ rx = b + CMD_BUFFER_SIZE;
|
||||
+
|
||||
id = state->c++;
|
||||
|
||||
/* prepare command header */
|
||||
- state->data[0] = SYNC_BYTE_OUT;
|
||||
- state->data[1] = id;
|
||||
- state->data[2] = PCTV_CMD_IR;
|
||||
- state->data[3] = 0;
|
||||
+ b[0] = SYNC_BYTE_OUT;
|
||||
+ b[1] = id;
|
||||
+ b[2] = PCTV_CMD_IR;
|
||||
+ b[3] = 0;
|
||||
|
||||
/* send ir request */
|
||||
- ret = dvb_usb_generic_rw(d, state->data, 4,
|
||||
- state->data, PCTV_ANSWER_LEN, 0);
|
||||
+ ret = dvb_usb_generic_rw(d, b, 4, rx, PCTV_ANSWER_LEN, 0);
|
||||
if (ret != 0)
|
||||
goto ret;
|
||||
|
||||
if (debug > 3) {
|
||||
- info("%s: read: %2d: %*ph: ", __func__, ret, 3, state->data);
|
||||
- for (i = 0; (i < state->data[3]) && ((i + 3) < PCTV_ANSWER_LEN); i++)
|
||||
- info(" %02x", state->data[i + 3]);
|
||||
+ info("%s: read: %2d: %*ph: ", __func__, ret, 3, rx);
|
||||
+ for (i = 0; (i < rx[3]) && ((i+3) < PCTV_ANSWER_LEN); i++)
|
||||
+ info(" %02x", rx[i+3]);
|
||||
|
||||
info("\n");
|
||||
}
|
||||
|
||||
- if ((state->data[3] == 9) && (state->data[12] & 0x01)) {
|
||||
+ if ((rx[3] == 9) && (rx[12] & 0x01)) {
|
||||
/* got a "press" event */
|
||||
- state->last_rc_key = RC_SCANCODE_RC5(state->data[7], state->data[6]);
|
||||
+ state->last_rc_key = RC_SCANCODE_RC5(rx[7], rx[6]);
|
||||
if (debug > 2)
|
||||
info("%s: cmd=0x%02x sys=0x%02x\n",
|
||||
- __func__, state->data[6], state->data[7]);
|
||||
+ __func__, rx[6], rx[7]);
|
||||
|
||||
rc_keydown(d->rc_dev, RC_TYPE_RC5, state->last_rc_key, 0);
|
||||
} else if (state->last_rc_key) {
|
||||
@@ -595,7 +606,7 @@ static int pctv452e_rc_query(struct dvb_usb_device *d)
|
||||
state->last_rc_key = 0;
|
||||
}
|
||||
ret:
|
||||
- mutex_unlock(&state->ca_mutex);
|
||||
+ kfree(b);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user