mirror of https://gitee.com/openkylin/linux.git
Linux 3.5-rc5
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iQEcBAABAgAGBQJP74cgAAoJEHm+PkMAQRiG1mMH/A1uPaF6CZhyaDHRYAdlxzIl OQ5FJNlX1vzPZg6VLiNi4KxcbfgVrVSU6oghD6ASmoWje7PkhbzzoJVeUu9DYbbQ oz/IXJi/SqYMhbZvqZ4DsCY25sZNWsWfeabs38hil9BEaxj6xOqF1iR0RUrvcRoP K6kyYUNk2C7q8w/ouco5kmIcEWf6xD4bJWInyL5r/VGpRnNeZewFfsHoZ8tUWxwA ndsD45njKqnSHfBTipkVMXanHZQC0rpwLi+Rxv/+yBlQdDFVxD+RFrjLmV98XKLb dFZzV9WiuiMM1qnwiolQYMNUT8ZJYLzy04duG8wGqwzh5rWo3tv+01wAbAtTFvg= =4UfY -----END PGP SIGNATURE----- Merge tag 'v3.5-rc5' into regulator-drivers Linux 3.5-rc5 collides with further development. Conflicts: drivers/regulator/tps65023-regulator.c
This commit is contained in:
commit
744c62eb65
|
@ -986,13 +986,13 @@ http://www.thedirks.org/winnov/</ulink></para></entry>
|
|||
<row id="V4L2-PIX-FMT-Y4">
|
||||
<entry><constant>V4L2_PIX_FMT_Y4</constant></entry>
|
||||
<entry>'Y04 '</entry>
|
||||
<entry>Old 4-bit greyscale format. Only the least significant 4 bits of each byte are used,
|
||||
<entry>Old 4-bit greyscale format. Only the most significant 4 bits of each byte are used,
|
||||
the other bits are set to 0.</entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-Y6">
|
||||
<entry><constant>V4L2_PIX_FMT_Y6</constant></entry>
|
||||
<entry>'Y06 '</entry>
|
||||
<entry>Old 6-bit greyscale format. Only the least significant 6 bits of each byte are used,
|
||||
<entry>Old 6-bit greyscale format. Only the most significant 6 bits of each byte are used,
|
||||
the other bits are set to 0.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
|
|
@ -560,6 +560,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||
&sub-g-tuner;
|
||||
&sub-log-status;
|
||||
&sub-overlay;
|
||||
&sub-prepare-buf;
|
||||
&sub-qbuf;
|
||||
&sub-querybuf;
|
||||
&sub-querycap;
|
||||
|
@ -567,7 +568,6 @@ and discussions on the V4L mailing list.</revremark>
|
|||
&sub-query-dv-preset;
|
||||
&sub-query-dv-timings;
|
||||
&sub-querystd;
|
||||
&sub-prepare-buf;
|
||||
&sub-reqbufs;
|
||||
&sub-s-hw-freq-seek;
|
||||
&sub-streamon;
|
||||
|
|
|
@ -108,10 +108,9 @@ information.</para>
|
|||
/></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry>struct v4l2_format</entry>
|
||||
<entry><structfield>format</structfield></entry>
|
||||
<entry>Filled in by the application, preserved by the driver.
|
||||
See <xref linkend="v4l2-format" />.</entry>
|
||||
<entry>Filled in by the application, preserved by the driver.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
<row>
|
||||
<entry></entry>
|
||||
<entry>&v4l2-event-frame-sync;</entry>
|
||||
<entry><structfield>frame</structfield></entry>
|
||||
<entry><structfield>frame_sync</structfield></entry>
|
||||
<entry>Event data for event V4L2_EVENT_FRAME_SYNC.</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
|
|
@ -12,6 +12,12 @@ Rules on what kind of patches are accepted, and which ones are not, into the
|
|||
marked CONFIG_BROKEN), an oops, a hang, data corruption, a real
|
||||
security issue, or some "oh, that's not good" issue. In short, something
|
||||
critical.
|
||||
- Serious issues as reported by a user of a distribution kernel may also
|
||||
be considered if they fix a notable performance or interactivity issue.
|
||||
As these fixes are not as obvious and have a higher risk of a subtle
|
||||
regression they should only be submitted by a distribution kernel
|
||||
maintainer and include an addendum linking to a bugzilla entry if it
|
||||
exists and additional information on the user-visible impact.
|
||||
- New device IDs and quirks are also accepted.
|
||||
- No "theoretical race condition" issues, unless an explanation of how the
|
||||
race can be exploited is also provided.
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 3
|
||||
PATCHLEVEL = 5
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc4
|
||||
EXTRAVERSION = -rc5
|
||||
NAME = Saber-toothed Squirrel
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -212,7 +212,7 @@ config MACH_SMDKV310
|
|||
select EXYNOS_DEV_SYSMMU
|
||||
select EXYNOS4_DEV_AHCI
|
||||
select SAMSUNG_DEV_KEYPAD
|
||||
select EXYNOS4_DEV_DMA
|
||||
select EXYNOS_DEV_DMA
|
||||
select SAMSUNG_DEV_PWM
|
||||
select EXYNOS4_DEV_USB_OHCI
|
||||
select EXYNOS4_SETUP_FIMD0
|
||||
|
@ -264,7 +264,7 @@ config MACH_UNIVERSAL_C210
|
|||
select S5P_DEV_ONENAND
|
||||
select S5P_DEV_TV
|
||||
select EXYNOS_DEV_SYSMMU
|
||||
select EXYNOS4_DEV_DMA
|
||||
select EXYNOS_DEV_DMA
|
||||
select EXYNOS_DEV_DRM
|
||||
select EXYNOS4_SETUP_FIMD0
|
||||
select EXYNOS4_SETUP_I2C1
|
||||
|
@ -303,7 +303,7 @@ config MACH_NURI
|
|||
select S5P_DEV_MFC
|
||||
select S5P_DEV_USB_EHCI
|
||||
select S5P_SETUP_MIPIPHY
|
||||
select EXYNOS4_DEV_DMA
|
||||
select EXYNOS_DEV_DMA
|
||||
select EXYNOS_DEV_DRM
|
||||
select EXYNOS4_SETUP_FIMC
|
||||
select EXYNOS4_SETUP_FIMD0
|
||||
|
@ -341,7 +341,7 @@ config MACH_ORIGEN
|
|||
select SAMSUNG_DEV_PWM
|
||||
select EXYNOS_DEV_DRM
|
||||
select EXYNOS_DEV_SYSMMU
|
||||
select EXYNOS4_DEV_DMA
|
||||
select EXYNOS_DEV_DMA
|
||||
select EXYNOS4_DEV_USB_OHCI
|
||||
select EXYNOS4_SETUP_FIMD0
|
||||
select EXYNOS4_SETUP_SDHCI
|
||||
|
|
|
@ -152,13 +152,14 @@ enum mx6q_clks {
|
|||
ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3,
|
||||
usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg,
|
||||
pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg,
|
||||
ssi2_ipg, ssi3_ipg, clk_max
|
||||
ssi2_ipg, ssi3_ipg, rom,
|
||||
clk_max
|
||||
};
|
||||
|
||||
static struct clk *clk[clk_max];
|
||||
|
||||
static enum mx6q_clks const clks_init_on[] __initconst = {
|
||||
mmdc_ch0_axi, mmdc_ch1_axi,
|
||||
mmdc_ch0_axi, rom,
|
||||
};
|
||||
|
||||
int __init mx6q_clocks_init(void)
|
||||
|
@ -364,6 +365,7 @@ int __init mx6q_clocks_init(void)
|
|||
clk[gpmi_bch] = imx_clk_gate2("gpmi_bch", "usdhc4", base + 0x78, 26);
|
||||
clk[gpmi_io] = imx_clk_gate2("gpmi_io", "enfc", base + 0x78, 28);
|
||||
clk[gpmi_apb] = imx_clk_gate2("gpmi_apb", "usdhc3", base + 0x78, 30);
|
||||
clk[rom] = imx_clk_gate2("rom", "ahb", base + 0x7c, 0);
|
||||
clk[sata] = imx_clk_gate2("sata", "ipg", base + 0x7c, 4);
|
||||
clk[sdma] = imx_clk_gate2("sdma", "ahb", base + 0x7c, 6);
|
||||
clk[spba] = imx_clk_gate2("spba", "ipg", base + 0x7c, 12);
|
||||
|
|
|
@ -97,11 +97,6 @@ __init board_onenand_init(struct mtd_partition *onenand_parts,
|
|||
|
||||
gpmc_onenand_init(&board_onenand_data);
|
||||
}
|
||||
#else
|
||||
void
|
||||
__init board_onenand_init(struct mtd_partition *nor_parts, u8 nr_parts, u8 cs)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_MTD_ONENAND_OMAP2 || CONFIG_MTD_ONENAND_OMAP2_MODULE */
|
||||
|
||||
#if defined(CONFIG_MTD_NAND_OMAP2) || \
|
||||
|
|
|
@ -3417,9 +3417,12 @@ int __init omap4xxx_clk_init(void)
|
|||
if (cpu_is_omap443x()) {
|
||||
cpu_mask = RATE_IN_4430;
|
||||
cpu_clkflg = CK_443X;
|
||||
} else if (cpu_is_omap446x()) {
|
||||
} else if (cpu_is_omap446x() || cpu_is_omap447x()) {
|
||||
cpu_mask = RATE_IN_4460 | RATE_IN_4430;
|
||||
cpu_clkflg = CK_446X | CK_443X;
|
||||
|
||||
if (cpu_is_omap447x())
|
||||
pr_warn("WARNING: OMAP4470 clock data incomplete!\n");
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -779,6 +779,7 @@ DT_MACHINE_START(ARMADILLO800EVA_DT, "armadillo800eva")
|
|||
.init_irq = r8a7740_init_irq,
|
||||
.handle_irq = shmobile_handle_irq_intc,
|
||||
.init_machine = eva_init,
|
||||
.init_late = shmobile_init_late,
|
||||
.timer = &shmobile_timer,
|
||||
.dt_compat = eva_boards_compat_dt,
|
||||
MACHINE_END
|
||||
|
|
|
@ -80,6 +80,7 @@ DT_MACHINE_START(KZM9D_DT, "kzm9d")
|
|||
.init_irq = emev2_init_irq,
|
||||
.handle_irq = gic_handle_irq,
|
||||
.init_machine = kzm9d_add_standard_devices,
|
||||
.init_late = shmobile_init_late,
|
||||
.timer = &shmobile_timer,
|
||||
.dt_compat = kzm9d_boards_compat_dt,
|
||||
MACHINE_END
|
||||
|
|
|
@ -455,6 +455,7 @@ DT_MACHINE_START(KZM9G_DT, "kzm9g")
|
|||
.init_irq = sh73a0_init_irq,
|
||||
.handle_irq = gic_handle_irq,
|
||||
.init_machine = kzm_init,
|
||||
.init_late = shmobile_init_late,
|
||||
.timer = &shmobile_timer,
|
||||
.dt_compat = kzm9g_boards_compat_dt,
|
||||
MACHINE_END
|
||||
|
|
|
@ -1512,6 +1512,9 @@ static void __init mackerel_init(void)
|
|||
gpio_request(GPIO_FN_SDHID0_1, NULL);
|
||||
gpio_request(GPIO_FN_SDHID0_0, NULL);
|
||||
|
||||
/* SDHI0 PORT172 card-detect IRQ26 */
|
||||
gpio_request(GPIO_FN_IRQ26_172, NULL);
|
||||
|
||||
#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
|
||||
/* enable SDHI1 */
|
||||
gpio_request(GPIO_FN_SDHICMD1, NULL);
|
||||
|
|
|
@ -475,9 +475,9 @@ static struct clk *late_main_clks[] = {
|
|||
|
||||
enum { MSTP001,
|
||||
MSTP129, MSTP128, MSTP127, MSTP126, MSTP125, MSTP118, MSTP116, MSTP100,
|
||||
MSTP219,
|
||||
MSTP219, MSTP218,
|
||||
MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
|
||||
MSTP331, MSTP329, MSTP325, MSTP323, MSTP318,
|
||||
MSTP331, MSTP329, MSTP325, MSTP323,
|
||||
MSTP314, MSTP313, MSTP312, MSTP311,
|
||||
MSTP303, MSTP302, MSTP301, MSTP300,
|
||||
MSTP411, MSTP410, MSTP403,
|
||||
|
@ -497,6 +497,7 @@ static struct clk mstp_clks[MSTP_NR] = {
|
|||
[MSTP116] = MSTP(&div4_clks[DIV4_HP], SMSTPCR1, 16, 0), /* IIC0 */
|
||||
[MSTP100] = MSTP(&div4_clks[DIV4_B], SMSTPCR1, 0, 0), /* LCDC0 */
|
||||
[MSTP219] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 19, 0), /* SCIFA7 */
|
||||
[MSTP218] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 18, 0), /* SY-DMAC */
|
||||
[MSTP207] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 7, 0), /* SCIFA5 */
|
||||
[MSTP206] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 6, 0), /* SCIFB */
|
||||
[MSTP204] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 4, 0), /* SCIFA0 */
|
||||
|
@ -508,7 +509,6 @@ static struct clk mstp_clks[MSTP_NR] = {
|
|||
[MSTP329] = MSTP(&r_clk, SMSTPCR3, 29, 0), /* CMT10 */
|
||||
[MSTP325] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 25, 0), /* IrDA */
|
||||
[MSTP323] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 23, 0), /* IIC1 */
|
||||
[MSTP318] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 18, 0), /* SY-DMAC */
|
||||
[MSTP314] = MSTP(&div6_clks[DIV6_SDHI0], SMSTPCR3, 14, 0), /* SDHI0 */
|
||||
[MSTP313] = MSTP(&div6_clks[DIV6_SDHI1], SMSTPCR3, 13, 0), /* SDHI1 */
|
||||
[MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */
|
||||
|
@ -552,6 +552,7 @@ static struct clk_lookup lookups[] = {
|
|||
CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]), /* I2C0 */
|
||||
CLKDEV_DEV_ID("sh_mobile_lcdc_fb.0", &mstp_clks[MSTP100]), /* LCDC0 */
|
||||
CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP219]), /* SCIFA7 */
|
||||
CLKDEV_DEV_ID("sh-dma-engine.0", &mstp_clks[MSTP218]), /* SY-DMAC */
|
||||
CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP207]), /* SCIFA5 */
|
||||
CLKDEV_DEV_ID("sh-sci.8", &mstp_clks[MSTP206]), /* SCIFB */
|
||||
CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]), /* SCIFA0 */
|
||||
|
@ -563,7 +564,6 @@ static struct clk_lookup lookups[] = {
|
|||
CLKDEV_DEV_ID("sh_cmt.10", &mstp_clks[MSTP329]), /* CMT10 */
|
||||
CLKDEV_DEV_ID("sh_irda.0", &mstp_clks[MSTP325]), /* IrDA */
|
||||
CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), /* I2C1 */
|
||||
CLKDEV_DEV_ID("sh-dma-engine.0", &mstp_clks[MSTP318]), /* SY-DMAC */
|
||||
CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), /* SDHI0 */
|
||||
CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */
|
||||
CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
#define INT2SMSKCR3 0xfe7822ac
|
||||
#define INT2SMSKCR4 0xfe7822b0
|
||||
|
||||
#define INT2NTSR0 0xfe700060
|
||||
#define INT2NTSR1 0xfe700064
|
||||
|
||||
static int r8a7779_set_wake(struct irq_data *data, unsigned int on)
|
||||
{
|
||||
return 0; /* always allow wakeup */
|
||||
|
@ -49,6 +52,10 @@ void __init r8a7779_init_irq(void)
|
|||
gic_init(0, 29, gic_dist_base, gic_cpu_base);
|
||||
gic_arch_extn.irq_set_wake = r8a7779_set_wake;
|
||||
|
||||
/* route all interrupts to ARM */
|
||||
__raw_writel(0xffffffff, INT2NTSR0);
|
||||
__raw_writel(0x3fffffff, INT2NTSR1);
|
||||
|
||||
/* unmask all known interrupts in INTCS2 */
|
||||
__raw_writel(0xfffffff0, INT2SMSKCR0);
|
||||
__raw_writel(0xfff7ffff, INT2SMSKCR1);
|
||||
|
|
|
@ -25,7 +25,12 @@
|
|||
#define is_sh73a0() (machine_is_ag5evm() || machine_is_kota2() || \
|
||||
of_machine_is_compatible("renesas,sh73a0"))
|
||||
#define is_r8a7779() machine_is_marzen()
|
||||
|
||||
#ifdef CONFIG_ARCH_EMEV2
|
||||
#define is_emev2() of_machine_is_compatible("renesas,emev2")
|
||||
#else
|
||||
#define is_emev2() (0)
|
||||
#endif
|
||||
|
||||
static unsigned int __init shmobile_smp_get_core_count(void)
|
||||
{
|
||||
|
|
|
@ -484,7 +484,7 @@ static const struct sh_dmae_slave_config sh7372_dmae_slaves[] = {
|
|||
},
|
||||
};
|
||||
|
||||
#define SH7372_CHCLR 0x220
|
||||
#define SH7372_CHCLR (0x220 - 0x20)
|
||||
|
||||
static const struct sh_dmae_channel sh7372_dmae_channels[] = {
|
||||
{
|
||||
|
|
|
@ -1067,7 +1067,7 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, gfp_t
|
|||
return NULL;
|
||||
|
||||
while (count) {
|
||||
int j, order = __ffs(count);
|
||||
int j, order = __fls(count);
|
||||
|
||||
pages[i] = alloc_pages(gfp | __GFP_NOWARN, order);
|
||||
while (!pages[i] && order)
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#ifndef __MACH_MX2_CAM_H_
|
||||
#define __MACH_MX2_CAM_H_
|
||||
|
||||
#define MX2_CAMERA_SWAP16 (1 << 0)
|
||||
#define MX2_CAMERA_EXT_VSYNC (1 << 1)
|
||||
#define MX2_CAMERA_CCIR (1 << 2)
|
||||
#define MX2_CAMERA_CCIR_INTERLACE (1 << 3)
|
||||
|
@ -30,6 +31,7 @@
|
|||
#define MX2_CAMERA_GATED_CLOCK (1 << 5)
|
||||
#define MX2_CAMERA_INV_DATA (1 << 6)
|
||||
#define MX2_CAMERA_PCLK_SAMPLE_RISING (1 << 7)
|
||||
#define MX2_CAMERA_PACK_DIR_MSB (1 << 8)
|
||||
|
||||
/**
|
||||
* struct mx2_camera_platform_data - optional platform data for mx2_camera
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#define S3C24XX_VA_WATCHDOG S3C_VA_WATCHDOG
|
||||
|
||||
#define S3C2412_VA_SSMC S3C_ADDR_CPU(0x00000000)
|
||||
#define S3C2412_VA_EBI S3C_ADDR_CPU(0x00010000)
|
||||
#define S3C2412_VA_EBI S3C_ADDR_CPU(0x00100000)
|
||||
|
||||
#define S3C2410_PA_UART (0x50000000)
|
||||
#define S3C24XX_PA_UART S3C2410_PA_UART
|
||||
|
|
|
@ -25,7 +25,7 @@ static inline void arch_wdt_reset(void)
|
|||
|
||||
__raw_writel(0, S3C2410_WTCON); /* disable watchdog, to be safe */
|
||||
|
||||
if (s3c2410_wdtclk)
|
||||
if (!IS_ERR(s3c2410_wdtclk))
|
||||
clk_enable(s3c2410_wdtclk);
|
||||
|
||||
/* put initial values into count and data */
|
||||
|
|
|
@ -42,4 +42,11 @@ unsigned long clk_get_rate(struct clk *clk)
|
|||
return MCF_CLK;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_rate);
|
||||
|
||||
struct clk *devm_clk_get(struct device *dev, const char *id)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(devm_clk_get);
|
||||
|
||||
/***************************************************************************/
|
||||
|
|
|
@ -103,6 +103,11 @@ static inline void hard_irq_disable(void)
|
|||
/* include/linux/interrupt.h needs hard_irq_disable to be a macro */
|
||||
#define hard_irq_disable hard_irq_disable
|
||||
|
||||
static inline bool lazy_irq_pending(void)
|
||||
{
|
||||
return !!(get_paca()->irq_happened & ~PACA_IRQ_HARD_DIS);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is called by asynchronous interrupts to conditionally
|
||||
* re-enable hard interrupts when soft-disabled after having
|
||||
|
|
|
@ -558,27 +558,54 @@ _GLOBAL(ret_from_except_lite)
|
|||
mtmsrd r10,1 /* Update machine state */
|
||||
#endif /* CONFIG_PPC_BOOK3E */
|
||||
|
||||
#ifdef CONFIG_PREEMPT
|
||||
clrrdi r9,r1,THREAD_SHIFT /* current_thread_info() */
|
||||
li r0,_TIF_NEED_RESCHED /* bits to check */
|
||||
ld r3,_MSR(r1)
|
||||
ld r4,TI_FLAGS(r9)
|
||||
/* Move MSR_PR bit in r3 to _TIF_SIGPENDING position in r0 */
|
||||
rlwimi r0,r3,32+TIF_SIGPENDING-MSR_PR_LG,_TIF_SIGPENDING
|
||||
and. r0,r4,r0 /* check NEED_RESCHED and maybe SIGPENDING */
|
||||
bne do_work
|
||||
|
||||
#else /* !CONFIG_PREEMPT */
|
||||
ld r3,_MSR(r1) /* Returning to user mode? */
|
||||
andi. r3,r3,MSR_PR
|
||||
beq restore /* if not, just restore regs and return */
|
||||
beq resume_kernel
|
||||
|
||||
/* Check current_thread_info()->flags */
|
||||
andi. r0,r4,_TIF_USER_WORK_MASK
|
||||
beq restore
|
||||
|
||||
andi. r0,r4,_TIF_NEED_RESCHED
|
||||
beq 1f
|
||||
bl .restore_interrupts
|
||||
bl .schedule
|
||||
b .ret_from_except_lite
|
||||
|
||||
1: bl .save_nvgprs
|
||||
bl .restore_interrupts
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl .do_notify_resume
|
||||
b .ret_from_except
|
||||
|
||||
resume_kernel:
|
||||
#ifdef CONFIG_PREEMPT
|
||||
/* Check if we need to preempt */
|
||||
andi. r0,r4,_TIF_NEED_RESCHED
|
||||
beq+ restore
|
||||
/* Check that preempt_count() == 0 and interrupts are enabled */
|
||||
lwz r8,TI_PREEMPT(r9)
|
||||
cmpwi cr1,r8,0
|
||||
ld r0,SOFTE(r1)
|
||||
cmpdi r0,0
|
||||
crandc eq,cr1*4+eq,eq
|
||||
bne restore
|
||||
|
||||
/*
|
||||
* Here we are preempting the current task. We want to make
|
||||
* sure we are soft-disabled first
|
||||
*/
|
||||
SOFT_DISABLE_INTS(r3,r4)
|
||||
1: bl .preempt_schedule_irq
|
||||
|
||||
/* Re-test flags and eventually loop */
|
||||
clrrdi r9,r1,THREAD_SHIFT
|
||||
ld r4,TI_FLAGS(r9)
|
||||
andi. r0,r4,_TIF_USER_WORK_MASK
|
||||
bne do_work
|
||||
#endif /* !CONFIG_PREEMPT */
|
||||
andi. r0,r4,_TIF_NEED_RESCHED
|
||||
bne 1b
|
||||
#endif /* CONFIG_PREEMPT */
|
||||
|
||||
.globl fast_exc_return_irq
|
||||
fast_exc_return_irq:
|
||||
|
@ -759,50 +786,6 @@ restore_check_irq_replay:
|
|||
#endif /* CONFIG_PPC_BOOK3E */
|
||||
1: b .ret_from_except /* What else to do here ? */
|
||||
|
||||
|
||||
|
||||
3:
|
||||
do_work:
|
||||
#ifdef CONFIG_PREEMPT
|
||||
andi. r0,r3,MSR_PR /* Returning to user mode? */
|
||||
bne user_work
|
||||
/* Check that preempt_count() == 0 and interrupts are enabled */
|
||||
lwz r8,TI_PREEMPT(r9)
|
||||
cmpwi cr1,r8,0
|
||||
ld r0,SOFTE(r1)
|
||||
cmpdi r0,0
|
||||
crandc eq,cr1*4+eq,eq
|
||||
bne restore
|
||||
|
||||
/*
|
||||
* Here we are preempting the current task. We want to make
|
||||
* sure we are soft-disabled first
|
||||
*/
|
||||
SOFT_DISABLE_INTS(r3,r4)
|
||||
1: bl .preempt_schedule_irq
|
||||
|
||||
/* Re-test flags and eventually loop */
|
||||
clrrdi r9,r1,THREAD_SHIFT
|
||||
ld r4,TI_FLAGS(r9)
|
||||
andi. r0,r4,_TIF_NEED_RESCHED
|
||||
bne 1b
|
||||
b restore
|
||||
|
||||
user_work:
|
||||
#endif /* CONFIG_PREEMPT */
|
||||
|
||||
andi. r0,r4,_TIF_NEED_RESCHED
|
||||
beq 1f
|
||||
bl .restore_interrupts
|
||||
bl .schedule
|
||||
b .ret_from_except_lite
|
||||
|
||||
1: bl .save_nvgprs
|
||||
bl .restore_interrupts
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl .do_notify_resume
|
||||
b .ret_from_except
|
||||
|
||||
unrecov_restore:
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl .unrecoverable_exception
|
||||
|
|
|
@ -277,7 +277,7 @@ EXPORT_SYMBOL(arch_local_irq_restore);
|
|||
* NOTE: This is called with interrupts hard disabled but not marked
|
||||
* as such in paca->irq_happened, so we need to resync this.
|
||||
*/
|
||||
void restore_interrupts(void)
|
||||
void notrace restore_interrupts(void)
|
||||
{
|
||||
if (irqs_disabled()) {
|
||||
local_paca->irq_happened |= PACA_IRQ_HARD_DIS;
|
||||
|
|
|
@ -1312,7 +1312,7 @@ static struct opal_secondary_data {
|
|||
|
||||
extern char opal_secondary_entry;
|
||||
|
||||
static void prom_query_opal(void)
|
||||
static void __init prom_query_opal(void)
|
||||
{
|
||||
long rc;
|
||||
|
||||
|
@ -1436,7 +1436,7 @@ static void __init prom_opal_hold_cpus(void)
|
|||
prom_debug("prom_opal_hold_cpus: end...\n");
|
||||
}
|
||||
|
||||
static void prom_opal_takeover(void)
|
||||
static void __init prom_opal_takeover(void)
|
||||
{
|
||||
struct opal_secondary_data *data = &RELOC(opal_secondary_data);
|
||||
struct opal_takeover_args *args = &data->args;
|
||||
|
|
|
@ -635,7 +635,7 @@ static inline int __init read_usm_ranges(const u32 **usm)
|
|||
*/
|
||||
static void __init parse_drconf_memory(struct device_node *memory)
|
||||
{
|
||||
const u32 *dm, *usm;
|
||||
const u32 *uninitialized_var(dm), *usm;
|
||||
unsigned int n, rc, ranges, is_kexec_kdump = 0;
|
||||
unsigned long lmb_size, base, size, sz;
|
||||
int nid;
|
||||
|
|
|
@ -105,6 +105,7 @@ sk_load_byte_msh_positive_offset:
|
|||
mr r4, r_addr; \
|
||||
li r6, SIZE; \
|
||||
bl skb_copy_bits; \
|
||||
nop; \
|
||||
/* R3 = 0 on success */ \
|
||||
addi r1, r1, BPF_PPC_SLOWPATH_FRAME; \
|
||||
ld r0, 16(r1); \
|
||||
|
@ -156,6 +157,7 @@ bpf_slow_path_byte_msh:
|
|||
mr r4, r_addr; \
|
||||
li r5, SIZE; \
|
||||
bl bpf_internal_load_pointer_neg_helper; \
|
||||
nop; \
|
||||
/* R3 != 0 on success */ \
|
||||
addi r1, r1, BPF_PPC_SLOWPATH_FRAME; \
|
||||
ld r0, 16(r1); \
|
||||
|
|
|
@ -106,7 +106,7 @@ static int tce_build_pSeries(struct iommu_table *tbl, long index,
|
|||
tcep++;
|
||||
}
|
||||
|
||||
if (tbl->it_type == TCE_PCI_SWINV_CREATE)
|
||||
if (tbl->it_type & TCE_PCI_SWINV_CREATE)
|
||||
tce_invalidate_pSeries_sw(tbl, tces, tcep - 1);
|
||||
return 0;
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ static void tce_free_pSeries(struct iommu_table *tbl, long index, long npages)
|
|||
while (npages--)
|
||||
*(tcep++) = 0;
|
||||
|
||||
if (tbl->it_type == TCE_PCI_SWINV_FREE)
|
||||
if (tbl->it_type & TCE_PCI_SWINV_FREE)
|
||||
tce_invalidate_pSeries_sw(tbl, tces, tcep - 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ static void check_and_cede_processor(void)
|
|||
* we first hard disable then check.
|
||||
*/
|
||||
hard_irq_disable();
|
||||
if (get_paca()->irq_happened == 0)
|
||||
if (!lazy_irq_pending())
|
||||
cede_processor();
|
||||
}
|
||||
|
||||
|
|
|
@ -201,8 +201,8 @@ static struct resource kfr2r09_usb0_gadget_resources[] = {
|
|||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = evtirq(0xa20),
|
||||
.end = evtirq(0xa20),
|
||||
.start = evt2irq(0xa20),
|
||||
.end = evt2irq(0xa20),
|
||||
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -239,7 +239,7 @@ static int __init pcie_clk_init(struct sh7786_pcie_port *port)
|
|||
clk->enable_reg = (void __iomem *)(chan->reg_base + SH4A_PCIEPHYCTLR);
|
||||
clk->enable_bit = BITS_CKE;
|
||||
|
||||
ret = sh_clk_mstp32_register(clk, 1);
|
||||
ret = sh_clk_mstp_register(clk, 1);
|
||||
if (unlikely(ret < 0))
|
||||
goto err_phy;
|
||||
|
||||
|
|
|
@ -283,7 +283,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div6_register(div6_clks, DIV6_NR);
|
||||
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -276,7 +276,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div6_register(div6_clks, DIV6_NR);
|
||||
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -261,7 +261,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div6_register(div6_clks, DIV6_NR);
|
||||
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, HWBLK_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, HWBLK_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -311,7 +311,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div6_register(div6_clks, DIV6_NR);
|
||||
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, HWBLK_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, HWBLK_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -375,7 +375,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR);
|
||||
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, HWBLK_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, HWBLK_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -260,7 +260,7 @@ int __init arch_clk_init(void)
|
|||
&div4_table);
|
||||
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -148,7 +148,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),
|
||||
&div4_table);
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -175,7 +175,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),
|
||||
&div4_table);
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -194,7 +194,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),
|
||||
&div4_table);
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -149,7 +149,7 @@ int __init arch_clk_init(void)
|
|||
ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks),
|
||||
&div4_table);
|
||||
if (!ret)
|
||||
ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
|
||||
ret = sh_clk_mstp_register(mstp_clks, MSTP_NR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
|
||||
{
|
||||
int err = 0;
|
||||
bool ia32 = is_ia32_task();
|
||||
bool ia32 = test_thread_flag(TIF_IA32);
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, to, sizeof(compat_siginfo_t)))
|
||||
return -EFAULT;
|
||||
|
|
|
@ -176,7 +176,7 @@
|
|||
#define X86_FEATURE_XSAVEOPT (7*32+ 4) /* Optimized Xsave */
|
||||
#define X86_FEATURE_PLN (7*32+ 5) /* Intel Power Limit Notification */
|
||||
#define X86_FEATURE_PTS (7*32+ 6) /* Intel Package Thermal Status */
|
||||
#define X86_FEATURE_DTS (7*32+ 7) /* Digital Thermal Sensor */
|
||||
#define X86_FEATURE_DTHERM (7*32+ 7) /* Digital Thermal Sensor */
|
||||
#define X86_FEATURE_HW_PSTATE (7*32+ 8) /* AMD HW-PState */
|
||||
|
||||
/* Virtualization flags: Linux defined, word 8 */
|
||||
|
|
|
@ -422,12 +422,14 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (intsrc->source_irq == 0 && intsrc->global_irq == 2) {
|
||||
if (intsrc->source_irq == 0) {
|
||||
if (acpi_skip_timer_override) {
|
||||
printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
|
||||
printk(PREFIX "BIOS IRQ0 override ignored.\n");
|
||||
return 0;
|
||||
}
|
||||
if (acpi_fix_pin2_polarity && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) {
|
||||
|
||||
if ((intsrc->global_irq == 2) && acpi_fix_pin2_polarity
|
||||
&& (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) {
|
||||
intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK;
|
||||
printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n");
|
||||
}
|
||||
|
@ -1334,17 +1336,12 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d)
|
|||
}
|
||||
|
||||
/*
|
||||
* Force ignoring BIOS IRQ0 pin2 override
|
||||
* Force ignoring BIOS IRQ0 override
|
||||
*/
|
||||
static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
|
||||
{
|
||||
/*
|
||||
* The ati_ixp4x0_rev() early PCI quirk should have set
|
||||
* the acpi_skip_timer_override flag already:
|
||||
*/
|
||||
if (!acpi_skip_timer_override) {
|
||||
WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n");
|
||||
pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n",
|
||||
pr_notice("%s detected: Ignoring BIOS IRQ0 override\n",
|
||||
d->ident);
|
||||
acpi_skip_timer_override = 1;
|
||||
}
|
||||
|
@ -1438,7 +1435,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = {
|
|||
* is enabled. This input is incorrectly designated the
|
||||
* ISA IRQ 0 via an interrupt source override even though
|
||||
* it is wired to the output of the master 8259A and INTIN0
|
||||
* is not connected at all. Force ignoring BIOS IRQ0 pin2
|
||||
* is not connected at all. Force ignoring BIOS IRQ0
|
||||
* override in that cases.
|
||||
*/
|
||||
{
|
||||
|
@ -1473,6 +1470,14 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = dmi_ignore_irq0_timer_override,
|
||||
.ident = "FUJITSU SIEMENS",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/perl
|
||||
#!/usr/bin/perl -w
|
||||
#
|
||||
# Generate the x86_cap_flags[] array from include/asm-x86/cpufeature.h
|
||||
#
|
||||
|
@ -11,22 +11,35 @@ open(OUT, "> $out\0") or die "$0: cannot create: $out: $!\n";
|
|||
print OUT "#include <asm/cpufeature.h>\n\n";
|
||||
print OUT "const char * const x86_cap_flags[NCAPINTS*32] = {\n";
|
||||
|
||||
%features = ();
|
||||
$err = 0;
|
||||
|
||||
while (defined($line = <IN>)) {
|
||||
if ($line =~ /^\s*\#\s*define\s+(X86_FEATURE_(\S+))\s+(.*)$/) {
|
||||
$macro = $1;
|
||||
$feature = $2;
|
||||
$feature = "\L$2";
|
||||
$tail = $3;
|
||||
if ($tail =~ /\/\*\s*\"([^"]*)\".*\*\//) {
|
||||
$feature = $1;
|
||||
$feature = "\L$1";
|
||||
}
|
||||
|
||||
if ($feature ne '') {
|
||||
printf OUT "\t%-32s = \"%s\",\n",
|
||||
"[$macro]", "\L$feature";
|
||||
next if ($feature eq '');
|
||||
|
||||
if ($features{$feature}++) {
|
||||
print STDERR "$in: duplicate feature name: $feature\n";
|
||||
$err++;
|
||||
}
|
||||
printf OUT "\t%-32s = \"%s\",\n", "[$macro]", $feature;
|
||||
}
|
||||
}
|
||||
print OUT "};\n";
|
||||
|
||||
close(IN);
|
||||
close(OUT);
|
||||
|
||||
if ($err) {
|
||||
unlink($out);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
|
|
@ -31,7 +31,7 @@ void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c)
|
|||
const struct cpuid_bit *cb;
|
||||
|
||||
static const struct cpuid_bit __cpuinitconst cpuid_bits[] = {
|
||||
{ X86_FEATURE_DTS, CR_EAX, 0, 0x00000006, 0 },
|
||||
{ X86_FEATURE_DTHERM, CR_EAX, 0, 0x00000006, 0 },
|
||||
{ X86_FEATURE_IDA, CR_EAX, 1, 0x00000006, 0 },
|
||||
{ X86_FEATURE_ARAT, CR_EAX, 2, 0x00000006, 0 },
|
||||
{ X86_FEATURE_PLN, CR_EAX, 4, 0x00000006, 0 },
|
||||
|
|
|
@ -444,12 +444,12 @@ void kgdb_roundup_cpus(unsigned long flags)
|
|||
|
||||
/**
|
||||
* kgdb_arch_handle_exception - Handle architecture specific GDB packets.
|
||||
* @vector: The error vector of the exception that happened.
|
||||
* @e_vector: The error vector of the exception that happened.
|
||||
* @signo: The signal number of the exception that happened.
|
||||
* @err_code: The error code of the exception that happened.
|
||||
* @remcom_in_buffer: The buffer of the packet we have read.
|
||||
* @remcom_out_buffer: The buffer of %BUFMAX bytes to write a packet into.
|
||||
* @regs: The &struct pt_regs of the current process.
|
||||
* @remcomInBuffer: The buffer of the packet we have read.
|
||||
* @remcomOutBuffer: The buffer of %BUFMAX bytes to write a packet into.
|
||||
* @linux_regs: The &struct pt_regs of the current process.
|
||||
*
|
||||
* This function MUST handle the 'c' and 's' command packets,
|
||||
* as well packets to set / remove a hardware breakpoint, if used.
|
||||
|
|
|
@ -451,6 +451,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Precision M6600. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell OptiPlex 990",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ EXPORT_SYMBOL(csum_partial_copy_to_user);
|
|||
* @src: source address
|
||||
* @dst: destination address
|
||||
* @len: number of bytes to be copied.
|
||||
* @isum: initial sum that is added into the result (32bit unfolded)
|
||||
* @sum: initial sum that is added into the result (32bit unfolded)
|
||||
*
|
||||
* Returns an 32bit unfolded checksum of the buffer.
|
||||
*/
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator"
|
||||
#define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80
|
||||
static DEFINE_MUTEX(isolated_cpus_lock);
|
||||
static DEFINE_MUTEX(round_robin_lock);
|
||||
|
||||
static unsigned long power_saving_mwait_eax;
|
||||
|
||||
|
@ -107,7 +108,7 @@ static void round_robin_cpu(unsigned int tsk_index)
|
|||
if (!alloc_cpumask_var(&tmp, GFP_KERNEL))
|
||||
return;
|
||||
|
||||
mutex_lock(&isolated_cpus_lock);
|
||||
mutex_lock(&round_robin_lock);
|
||||
cpumask_clear(tmp);
|
||||
for_each_cpu(cpu, pad_busy_cpus)
|
||||
cpumask_or(tmp, tmp, topology_thread_cpumask(cpu));
|
||||
|
@ -116,7 +117,7 @@ static void round_robin_cpu(unsigned int tsk_index)
|
|||
if (cpumask_empty(tmp))
|
||||
cpumask_andnot(tmp, cpu_online_mask, pad_busy_cpus);
|
||||
if (cpumask_empty(tmp)) {
|
||||
mutex_unlock(&isolated_cpus_lock);
|
||||
mutex_unlock(&round_robin_lock);
|
||||
return;
|
||||
}
|
||||
for_each_cpu(cpu, tmp) {
|
||||
|
@ -131,7 +132,7 @@ static void round_robin_cpu(unsigned int tsk_index)
|
|||
tsk_in_cpu[tsk_index] = preferred_cpu;
|
||||
cpumask_set_cpu(preferred_cpu, pad_busy_cpus);
|
||||
cpu_weight[preferred_cpu]++;
|
||||
mutex_unlock(&isolated_cpus_lock);
|
||||
mutex_unlock(&round_robin_lock);
|
||||
|
||||
set_cpus_allowed_ptr(current, cpumask_of(preferred_cpu));
|
||||
}
|
||||
|
|
|
@ -243,7 +243,7 @@ static int pre_map_gar_callback(struct apei_exec_context *ctx,
|
|||
u8 ins = entry->instruction;
|
||||
|
||||
if (ctx->ins_table[ins].flags & APEI_EXEC_INS_ACCESS_REGISTER)
|
||||
return acpi_os_map_generic_address(&entry->register_region);
|
||||
return apei_map_generic_address(&entry->register_region);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -276,7 +276,7 @@ static int post_unmap_gar_callback(struct apei_exec_context *ctx,
|
|||
u8 ins = entry->instruction;
|
||||
|
||||
if (ctx->ins_table[ins].flags & APEI_EXEC_INS_ACCESS_REGISTER)
|
||||
acpi_os_unmap_generic_address(&entry->register_region);
|
||||
apei_unmap_generic_address(&entry->register_region);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -606,6 +606,19 @@ static int apei_check_gar(struct acpi_generic_address *reg, u64 *paddr,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int apei_map_generic_address(struct acpi_generic_address *reg)
|
||||
{
|
||||
int rc;
|
||||
u32 access_bit_width;
|
||||
u64 address;
|
||||
|
||||
rc = apei_check_gar(reg, &address, &access_bit_width);
|
||||
if (rc)
|
||||
return rc;
|
||||
return acpi_os_map_generic_address(reg);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(apei_map_generic_address);
|
||||
|
||||
/* read GAR in interrupt (including NMI) or process context */
|
||||
int apei_read(u64 *val, struct acpi_generic_address *reg)
|
||||
{
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
#define APEI_INTERNAL_H
|
||||
|
||||
#include <linux/cper.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/acpi_io.h>
|
||||
|
||||
struct apei_exec_context;
|
||||
|
||||
|
@ -68,6 +70,13 @@ static inline int apei_exec_run_optional(struct apei_exec_context *ctx, u8 actio
|
|||
/* IP has been set in instruction function */
|
||||
#define APEI_EXEC_SET_IP 1
|
||||
|
||||
int apei_map_generic_address(struct acpi_generic_address *reg);
|
||||
|
||||
static inline void apei_unmap_generic_address(struct acpi_generic_address *reg)
|
||||
{
|
||||
acpi_os_unmap_generic_address(reg);
|
||||
}
|
||||
|
||||
int apei_read(u64 *val, struct acpi_generic_address *reg);
|
||||
int apei_write(u64 val, struct acpi_generic_address *reg);
|
||||
|
||||
|
|
|
@ -301,7 +301,7 @@ static struct ghes *ghes_new(struct acpi_hest_generic *generic)
|
|||
if (!ghes)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
ghes->generic = generic;
|
||||
rc = acpi_os_map_generic_address(&generic->error_status_address);
|
||||
rc = apei_map_generic_address(&generic->error_status_address);
|
||||
if (rc)
|
||||
goto err_free;
|
||||
error_block_length = generic->error_block_length;
|
||||
|
@ -321,7 +321,7 @@ static struct ghes *ghes_new(struct acpi_hest_generic *generic)
|
|||
return ghes;
|
||||
|
||||
err_unmap:
|
||||
acpi_os_unmap_generic_address(&generic->error_status_address);
|
||||
apei_unmap_generic_address(&generic->error_status_address);
|
||||
err_free:
|
||||
kfree(ghes);
|
||||
return ERR_PTR(rc);
|
||||
|
@ -330,7 +330,7 @@ static struct ghes *ghes_new(struct acpi_hest_generic *generic)
|
|||
static void ghes_fini(struct ghes *ghes)
|
||||
{
|
||||
kfree(ghes->estatus);
|
||||
acpi_os_unmap_generic_address(&ghes->generic->error_status_address);
|
||||
apei_unmap_generic_address(&ghes->generic->error_status_address);
|
||||
}
|
||||
|
||||
enum {
|
||||
|
|
|
@ -224,6 +224,7 @@ static void lapic_timer_state_broadcast(struct acpi_processor *pr,
|
|||
/*
|
||||
* Suspend / resume control
|
||||
*/
|
||||
static int acpi_idle_suspend;
|
||||
static u32 saved_bm_rld;
|
||||
|
||||
static void acpi_idle_bm_rld_save(void)
|
||||
|
@ -242,13 +243,21 @@ static void acpi_idle_bm_rld_restore(void)
|
|||
|
||||
int acpi_processor_suspend(struct acpi_device * device, pm_message_t state)
|
||||
{
|
||||
if (acpi_idle_suspend == 1)
|
||||
return 0;
|
||||
|
||||
acpi_idle_bm_rld_save();
|
||||
acpi_idle_suspend = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int acpi_processor_resume(struct acpi_device * device)
|
||||
{
|
||||
if (acpi_idle_suspend == 0)
|
||||
return 0;
|
||||
|
||||
acpi_idle_bm_rld_restore();
|
||||
acpi_idle_suspend = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -754,6 +763,12 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
|
|||
|
||||
local_irq_disable();
|
||||
|
||||
if (acpi_idle_suspend) {
|
||||
local_irq_enable();
|
||||
cpu_relax();
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
lapic_timer_state_broadcast(pr, cx, 1);
|
||||
kt1 = ktime_get_real();
|
||||
acpi_idle_do_entry(cx);
|
||||
|
@ -823,6 +838,12 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
|
|||
|
||||
local_irq_disable();
|
||||
|
||||
if (acpi_idle_suspend) {
|
||||
local_irq_enable();
|
||||
cpu_relax();
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (cx->entry_method != ACPI_CSTATE_FFH) {
|
||||
current_thread_info()->status &= ~TS_POLLING;
|
||||
/*
|
||||
|
@ -907,14 +928,21 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
|
|||
drv, drv->safe_state_index);
|
||||
} else {
|
||||
local_irq_disable();
|
||||
acpi_safe_halt();
|
||||
if (!acpi_idle_suspend)
|
||||
acpi_safe_halt();
|
||||
local_irq_enable();
|
||||
return -EINVAL;
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
if (acpi_idle_suspend) {
|
||||
local_irq_enable();
|
||||
cpu_relax();
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (cx->entry_method != ACPI_CSTATE_FFH) {
|
||||
current_thread_info()->status &= ~TS_POLLING;
|
||||
/*
|
||||
|
|
|
@ -173,7 +173,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp)
|
|||
{
|
||||
int result = 0;
|
||||
|
||||
if (!strncmp(val, "enable", strlen("enable") - 1)) {
|
||||
if (!strncmp(val, "enable", strlen("enable"))) {
|
||||
result = acpi_debug_trace(trace_method_name, trace_debug_level,
|
||||
trace_debug_layer, 0);
|
||||
if (result)
|
||||
|
@ -181,7 +181,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp)
|
|||
goto exit;
|
||||
}
|
||||
|
||||
if (!strncmp(val, "disable", strlen("disable") - 1)) {
|
||||
if (!strncmp(val, "disable", strlen("disable"))) {
|
||||
int name = 0;
|
||||
result = acpi_debug_trace((char *)&name, trace_debug_level,
|
||||
trace_debug_layer, 0);
|
||||
|
|
|
@ -558,6 +558,8 @@ acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag)
|
|||
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
|
||||
struct acpi_object_list args = { 1, &arg0 };
|
||||
|
||||
if (!video->cap._DOS)
|
||||
return 0;
|
||||
|
||||
if (bios_flag < 0 || bios_flag > 3 || lcd_flag < 0 || lcd_flag > 1)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -1031,7 +1031,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
|
|||
dpm_wait_for_children(dev, async);
|
||||
|
||||
if (async_error)
|
||||
return 0;
|
||||
goto Complete;
|
||||
|
||||
pm_runtime_get_noresume(dev);
|
||||
if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
|
||||
|
@ -1040,7 +1040,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
|
|||
if (pm_wakeup_pending()) {
|
||||
pm_runtime_put_sync(dev);
|
||||
async_error = -EBUSY;
|
||||
return 0;
|
||||
goto Complete;
|
||||
}
|
||||
|
||||
device_lock(dev);
|
||||
|
@ -1097,6 +1097,8 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
|
|||
}
|
||||
|
||||
device_unlock(dev);
|
||||
|
||||
Complete:
|
||||
complete_all(&dev->power.completion);
|
||||
|
||||
if (error) {
|
||||
|
|
|
@ -63,6 +63,7 @@ static struct usb_device_id ath3k_table[] = {
|
|||
|
||||
/* Atheros AR3011 with sflash firmware*/
|
||||
{ USB_DEVICE(0x0CF3, 0x3002) },
|
||||
{ USB_DEVICE(0x0CF3, 0xE019) },
|
||||
{ USB_DEVICE(0x13d3, 0x3304) },
|
||||
{ USB_DEVICE(0x0930, 0x0215) },
|
||||
{ USB_DEVICE(0x0489, 0xE03D) },
|
||||
|
@ -77,6 +78,7 @@ static struct usb_device_id ath3k_table[] = {
|
|||
{ USB_DEVICE(0x04CA, 0x3005) },
|
||||
{ USB_DEVICE(0x13d3, 0x3362) },
|
||||
{ USB_DEVICE(0x0CF3, 0xE004) },
|
||||
{ USB_DEVICE(0x0930, 0x0219) },
|
||||
|
||||
/* Atheros AR5BBU12 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xE02C) },
|
||||
|
@ -101,6 +103,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
|
|||
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
/* Atheros AR5BBU22 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 },
|
||||
|
|
|
@ -136,7 +136,7 @@ int btmrvl_remove_card(struct btmrvl_private *priv);
|
|||
|
||||
void btmrvl_interrupt(struct btmrvl_private *priv);
|
||||
|
||||
void btmrvl_check_evtpkt(struct btmrvl_private *priv, struct sk_buff *skb);
|
||||
bool btmrvl_check_evtpkt(struct btmrvl_private *priv, struct sk_buff *skb);
|
||||
int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb);
|
||||
|
||||
int btmrvl_send_module_cfg_cmd(struct btmrvl_private *priv, int subcmd);
|
||||
|
|
|
@ -44,23 +44,33 @@ void btmrvl_interrupt(struct btmrvl_private *priv)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(btmrvl_interrupt);
|
||||
|
||||
void btmrvl_check_evtpkt(struct btmrvl_private *priv, struct sk_buff *skb)
|
||||
bool btmrvl_check_evtpkt(struct btmrvl_private *priv, struct sk_buff *skb)
|
||||
{
|
||||
struct hci_event_hdr *hdr = (void *) skb->data;
|
||||
struct hci_ev_cmd_complete *ec;
|
||||
u16 opcode, ocf;
|
||||
u16 opcode, ocf, ogf;
|
||||
|
||||
if (hdr->evt == HCI_EV_CMD_COMPLETE) {
|
||||
ec = (void *) (skb->data + HCI_EVENT_HDR_SIZE);
|
||||
opcode = __le16_to_cpu(ec->opcode);
|
||||
ocf = hci_opcode_ocf(opcode);
|
||||
ogf = hci_opcode_ogf(opcode);
|
||||
|
||||
if (ocf == BT_CMD_MODULE_CFG_REQ &&
|
||||
priv->btmrvl_dev.sendcmdflag) {
|
||||
priv->btmrvl_dev.sendcmdflag = false;
|
||||
priv->adapter->cmd_complete = true;
|
||||
wake_up_interruptible(&priv->adapter->cmd_wait_q);
|
||||
}
|
||||
|
||||
if (ogf == OGF) {
|
||||
BT_DBG("vendor event skipped: ogf 0x%4.4x", ogf);
|
||||
kfree_skb(skb);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(btmrvl_check_evtpkt);
|
||||
|
||||
|
|
|
@ -562,10 +562,12 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
|
|||
skb_put(skb, buf_len);
|
||||
skb_pull(skb, SDIO_HEADER_LEN);
|
||||
|
||||
if (type == HCI_EVENT_PKT)
|
||||
btmrvl_check_evtpkt(priv, skb);
|
||||
if (type == HCI_EVENT_PKT) {
|
||||
if (btmrvl_check_evtpkt(priv, skb))
|
||||
hci_recv_frame(skb);
|
||||
} else
|
||||
hci_recv_frame(skb);
|
||||
|
||||
hci_recv_frame(skb);
|
||||
hdev->stat.byte_rx += buf_len;
|
||||
break;
|
||||
|
||||
|
|
|
@ -125,6 +125,7 @@ static struct usb_device_id blacklist_table[] = {
|
|||
|
||||
/* Atheros 3011 with sflash firmware */
|
||||
{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
|
||||
{ USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE },
|
||||
{ USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
|
||||
{ USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
|
||||
{ USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
|
||||
|
@ -139,6 +140,7 @@ static struct usb_device_id blacklist_table[] = {
|
|||
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
/* Atheros AR5BBU12 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
|
||||
|
|
|
@ -850,18 +850,21 @@ static void clk_change_rate(struct clk *clk)
|
|||
{
|
||||
struct clk *child;
|
||||
unsigned long old_rate;
|
||||
unsigned long best_parent_rate = 0;
|
||||
struct hlist_node *tmp;
|
||||
|
||||
old_rate = clk->rate;
|
||||
|
||||
if (clk->parent)
|
||||
best_parent_rate = clk->parent->rate;
|
||||
|
||||
if (clk->ops->set_rate)
|
||||
clk->ops->set_rate(clk->hw, clk->new_rate, clk->parent->rate);
|
||||
clk->ops->set_rate(clk->hw, clk->new_rate, best_parent_rate);
|
||||
|
||||
if (clk->ops->recalc_rate)
|
||||
clk->rate = clk->ops->recalc_rate(clk->hw,
|
||||
clk->parent->rate);
|
||||
clk->rate = clk->ops->recalc_rate(clk->hw, best_parent_rate);
|
||||
else
|
||||
clk->rate = clk->parent->rate;
|
||||
clk->rate = best_parent_rate;
|
||||
|
||||
if (clk->notifier_count && old_rate != clk->rate)
|
||||
__clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate);
|
||||
|
@ -999,7 +1002,7 @@ static struct clk *__clk_init_parent(struct clk *clk)
|
|||
|
||||
if (!clk->parents)
|
||||
clk->parents =
|
||||
kmalloc((sizeof(struct clk*) * clk->num_parents),
|
||||
kzalloc((sizeof(struct clk*) * clk->num_parents),
|
||||
GFP_KERNEL);
|
||||
|
||||
if (!clk->parents)
|
||||
|
@ -1065,9 +1068,13 @@ static int __clk_set_parent(struct clk *clk, struct clk *parent)
|
|||
old_parent = clk->parent;
|
||||
|
||||
/* find index of new parent clock using cached parent ptrs */
|
||||
for (i = 0; i < clk->num_parents; i++)
|
||||
if (clk->parents[i] == parent)
|
||||
break;
|
||||
if (clk->parents)
|
||||
for (i = 0; i < clk->num_parents; i++)
|
||||
if (clk->parents[i] == parent)
|
||||
break;
|
||||
else
|
||||
clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents),
|
||||
GFP_KERNEL);
|
||||
|
||||
/*
|
||||
* find index of new parent clock using string name comparison
|
||||
|
@ -1076,7 +1083,8 @@ static int __clk_set_parent(struct clk *clk, struct clk *parent)
|
|||
if (i == clk->num_parents)
|
||||
for (i = 0; i < clk->num_parents; i++)
|
||||
if (!strcmp(clk->parent_names[i], parent->name)) {
|
||||
clk->parents[i] = __clk_lookup(parent->name);
|
||||
if (clk->parents)
|
||||
clk->parents[i] = __clk_lookup(parent->name);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ static void __init clk_misc_init(void)
|
|||
__mxs_setl(30 << BP_FRAC_IOFRAC, FRAC);
|
||||
}
|
||||
|
||||
static struct clk_lookup uart_lookups[] __initdata = {
|
||||
static struct clk_lookup uart_lookups[] = {
|
||||
{ .dev_id = "duart", },
|
||||
{ .dev_id = "mxs-auart.0", },
|
||||
{ .dev_id = "mxs-auart.1", },
|
||||
|
@ -80,31 +80,31 @@ static struct clk_lookup uart_lookups[] __initdata = {
|
|||
{ .dev_id = "80070000.serial", },
|
||||
};
|
||||
|
||||
static struct clk_lookup hbus_lookups[] __initdata = {
|
||||
static struct clk_lookup hbus_lookups[] = {
|
||||
{ .dev_id = "imx23-dma-apbh", },
|
||||
{ .dev_id = "80004000.dma-apbh", },
|
||||
};
|
||||
|
||||
static struct clk_lookup xbus_lookups[] __initdata = {
|
||||
static struct clk_lookup xbus_lookups[] = {
|
||||
{ .dev_id = "duart", .con_id = "apb_pclk"},
|
||||
{ .dev_id = "80070000.serial", .con_id = "apb_pclk"},
|
||||
{ .dev_id = "imx23-dma-apbx", },
|
||||
{ .dev_id = "80024000.dma-apbx", },
|
||||
};
|
||||
|
||||
static struct clk_lookup ssp_lookups[] __initdata = {
|
||||
static struct clk_lookup ssp_lookups[] = {
|
||||
{ .dev_id = "imx23-mmc.0", },
|
||||
{ .dev_id = "imx23-mmc.1", },
|
||||
{ .dev_id = "80010000.ssp", },
|
||||
{ .dev_id = "80034000.ssp", },
|
||||
};
|
||||
|
||||
static struct clk_lookup lcdif_lookups[] __initdata = {
|
||||
static struct clk_lookup lcdif_lookups[] = {
|
||||
{ .dev_id = "imx23-fb", },
|
||||
{ .dev_id = "80030000.lcdif", },
|
||||
};
|
||||
|
||||
static struct clk_lookup gpmi_lookups[] __initdata = {
|
||||
static struct clk_lookup gpmi_lookups[] = {
|
||||
{ .dev_id = "imx23-gpmi-nand", },
|
||||
{ .dev_id = "8000c000.gpmi", },
|
||||
};
|
||||
|
|
|
@ -120,7 +120,7 @@ static void __init clk_misc_init(void)
|
|||
writel_relaxed(val, FRAC0);
|
||||
}
|
||||
|
||||
static struct clk_lookup uart_lookups[] __initdata = {
|
||||
static struct clk_lookup uart_lookups[] = {
|
||||
{ .dev_id = "duart", },
|
||||
{ .dev_id = "mxs-auart.0", },
|
||||
{ .dev_id = "mxs-auart.1", },
|
||||
|
@ -135,71 +135,71 @@ static struct clk_lookup uart_lookups[] __initdata = {
|
|||
{ .dev_id = "80074000.serial", },
|
||||
};
|
||||
|
||||
static struct clk_lookup hbus_lookups[] __initdata = {
|
||||
static struct clk_lookup hbus_lookups[] = {
|
||||
{ .dev_id = "imx28-dma-apbh", },
|
||||
{ .dev_id = "80004000.dma-apbh", },
|
||||
};
|
||||
|
||||
static struct clk_lookup xbus_lookups[] __initdata = {
|
||||
static struct clk_lookup xbus_lookups[] = {
|
||||
{ .dev_id = "duart", .con_id = "apb_pclk"},
|
||||
{ .dev_id = "80074000.serial", .con_id = "apb_pclk"},
|
||||
{ .dev_id = "imx28-dma-apbx", },
|
||||
{ .dev_id = "80024000.dma-apbx", },
|
||||
};
|
||||
|
||||
static struct clk_lookup ssp0_lookups[] __initdata = {
|
||||
static struct clk_lookup ssp0_lookups[] = {
|
||||
{ .dev_id = "imx28-mmc.0", },
|
||||
{ .dev_id = "80010000.ssp", },
|
||||
};
|
||||
|
||||
static struct clk_lookup ssp1_lookups[] __initdata = {
|
||||
static struct clk_lookup ssp1_lookups[] = {
|
||||
{ .dev_id = "imx28-mmc.1", },
|
||||
{ .dev_id = "80012000.ssp", },
|
||||
};
|
||||
|
||||
static struct clk_lookup ssp2_lookups[] __initdata = {
|
||||
static struct clk_lookup ssp2_lookups[] = {
|
||||
{ .dev_id = "imx28-mmc.2", },
|
||||
{ .dev_id = "80014000.ssp", },
|
||||
};
|
||||
|
||||
static struct clk_lookup ssp3_lookups[] __initdata = {
|
||||
static struct clk_lookup ssp3_lookups[] = {
|
||||
{ .dev_id = "imx28-mmc.3", },
|
||||
{ .dev_id = "80016000.ssp", },
|
||||
};
|
||||
|
||||
static struct clk_lookup lcdif_lookups[] __initdata = {
|
||||
static struct clk_lookup lcdif_lookups[] = {
|
||||
{ .dev_id = "imx28-fb", },
|
||||
{ .dev_id = "80030000.lcdif", },
|
||||
};
|
||||
|
||||
static struct clk_lookup gpmi_lookups[] __initdata = {
|
||||
static struct clk_lookup gpmi_lookups[] = {
|
||||
{ .dev_id = "imx28-gpmi-nand", },
|
||||
{ .dev_id = "8000c000.gpmi", },
|
||||
};
|
||||
|
||||
static struct clk_lookup fec_lookups[] __initdata = {
|
||||
static struct clk_lookup fec_lookups[] = {
|
||||
{ .dev_id = "imx28-fec.0", },
|
||||
{ .dev_id = "imx28-fec.1", },
|
||||
{ .dev_id = "800f0000.ethernet", },
|
||||
{ .dev_id = "800f4000.ethernet", },
|
||||
};
|
||||
|
||||
static struct clk_lookup can0_lookups[] __initdata = {
|
||||
static struct clk_lookup can0_lookups[] = {
|
||||
{ .dev_id = "flexcan.0", },
|
||||
{ .dev_id = "80032000.can", },
|
||||
};
|
||||
|
||||
static struct clk_lookup can1_lookups[] __initdata = {
|
||||
static struct clk_lookup can1_lookups[] = {
|
||||
{ .dev_id = "flexcan.1", },
|
||||
{ .dev_id = "80034000.can", },
|
||||
};
|
||||
|
||||
static struct clk_lookup saif0_lookups[] __initdata = {
|
||||
static struct clk_lookup saif0_lookups[] = {
|
||||
{ .dev_id = "mxs-saif.0", },
|
||||
{ .dev_id = "80042000.saif", },
|
||||
};
|
||||
|
||||
static struct clk_lookup saif1_lookups[] __initdata = {
|
||||
static struct clk_lookup saif1_lookups[] = {
|
||||
{ .dev_id = "mxs-saif.1", },
|
||||
{ .dev_id = "80046000.saif", },
|
||||
};
|
||||
|
@ -245,8 +245,8 @@ int __init mx28_clocks_init(void)
|
|||
clks[pll2] = mxs_clk_pll("pll2", "ref_xtal", PLL2CTRL0, 23, 50000000);
|
||||
clks[ref_cpu] = mxs_clk_ref("ref_cpu", "pll0", FRAC0, 0);
|
||||
clks[ref_emi] = mxs_clk_ref("ref_emi", "pll0", FRAC0, 1);
|
||||
clks[ref_io0] = mxs_clk_ref("ref_io0", "pll0", FRAC0, 2);
|
||||
clks[ref_io1] = mxs_clk_ref("ref_io1", "pll0", FRAC0, 3);
|
||||
clks[ref_io1] = mxs_clk_ref("ref_io1", "pll0", FRAC0, 2);
|
||||
clks[ref_io0] = mxs_clk_ref("ref_io0", "pll0", FRAC0, 3);
|
||||
clks[ref_pix] = mxs_clk_ref("ref_pix", "pll0", FRAC1, 0);
|
||||
clks[ref_hsadc] = mxs_clk_ref("ref_hsadc", "pll0", FRAC1, 1);
|
||||
clks[ref_gpmi] = mxs_clk_ref("ref_gpmi", "pll0", FRAC1, 2);
|
||||
|
|
|
@ -298,7 +298,7 @@ void __init spear6xx_clk_init(void)
|
|||
|
||||
clk = clk_register_gate(NULL, "gmac_clk", "ahb_clk", 0, PERIP1_CLK_ENB,
|
||||
GMAC_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gmac");
|
||||
clk_register_clkdev(clk, NULL, "e0800000.ethernet");
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c_clk", "ahb_clk", 0, PERIP1_CLK_ENB,
|
||||
I2C_CLK_ENB, 0, &_lock);
|
||||
|
|
|
@ -412,7 +412,6 @@ static void gen6_queue_rps_work(struct drm_i915_private *dev_priv,
|
|||
*/
|
||||
|
||||
spin_lock_irqsave(&dev_priv->rps_lock, flags);
|
||||
WARN(dev_priv->pm_iir & pm_iir, "Missed a PM interrupt\n");
|
||||
dev_priv->pm_iir |= pm_iir;
|
||||
I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
|
||||
POSTING_READ(GEN6_PMIMR);
|
||||
|
|
|
@ -740,8 +740,11 @@ static void i915_restore_display(struct drm_device *dev)
|
|||
if (HAS_PCH_SPLIT(dev)) {
|
||||
I915_WRITE(BLC_PWM_PCH_CTL1, dev_priv->saveBLC_PWM_CTL);
|
||||
I915_WRITE(BLC_PWM_PCH_CTL2, dev_priv->saveBLC_PWM_CTL2);
|
||||
I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->saveBLC_CPU_PWM_CTL);
|
||||
/* NOTE: BLC_PWM_CPU_CTL must be written after BLC_PWM_CPU_CTL2;
|
||||
* otherwise we get blank eDP screen after S3 on some machines
|
||||
*/
|
||||
I915_WRITE(BLC_PWM_CPU_CTL2, dev_priv->saveBLC_CPU_PWM_CTL2);
|
||||
I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->saveBLC_CPU_PWM_CTL);
|
||||
I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
|
||||
I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
|
||||
I915_WRITE(PCH_PP_DIVISOR, dev_priv->savePP_DIVISOR);
|
||||
|
|
|
@ -6921,19 +6921,6 @@ static void i915_disable_vga(struct drm_device *dev)
|
|||
POSTING_READ(vga_reg);
|
||||
}
|
||||
|
||||
static void ivb_pch_pwm_override(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
|
||||
/*
|
||||
* IVB has CPU eDP backlight regs too, set things up to let the
|
||||
* PCH regs control the backlight
|
||||
*/
|
||||
I915_WRITE(BLC_PWM_CPU_CTL2, PWM_ENABLE);
|
||||
I915_WRITE(BLC_PWM_CPU_CTL, 0);
|
||||
I915_WRITE(BLC_PWM_PCH_CTL1, PWM_ENABLE | (1<<30));
|
||||
}
|
||||
|
||||
void intel_modeset_init_hw(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
|
@ -6950,9 +6937,6 @@ void intel_modeset_init_hw(struct drm_device *dev)
|
|||
gen6_enable_rps(dev_priv);
|
||||
gen6_update_ring_freq(dev_priv);
|
||||
}
|
||||
|
||||
if (IS_IVYBRIDGE(dev))
|
||||
ivb_pch_pwm_override(dev);
|
||||
}
|
||||
|
||||
void intel_modeset_init(struct drm_device *dev)
|
||||
|
|
|
@ -467,7 +467,7 @@ int nouveau_fbcon_init(struct drm_device *dev)
|
|||
nfbdev->helper.funcs = &nouveau_fbcon_helper_funcs;
|
||||
|
||||
ret = drm_fb_helper_init(dev, &nfbdev->helper,
|
||||
nv_two_heads(dev) ? 2 : 1, 4);
|
||||
dev->mode_config.num_crtc, 4);
|
||||
if (ret) {
|
||||
kfree(nfbdev);
|
||||
return ret;
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
/*
|
||||
* Copyright 2011 Red Hat Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Dave Airlie
|
||||
*/
|
||||
|
||||
#include "drmP.h"
|
||||
#include "drm.h"
|
||||
|
|
|
@ -61,7 +61,7 @@ static int udl_parse_vendor_descriptor(struct drm_device *dev,
|
|||
u8 length;
|
||||
u16 key;
|
||||
|
||||
key = *((u16 *) desc);
|
||||
key = le16_to_cpu(*((u16 *) desc));
|
||||
desc += sizeof(u16);
|
||||
length = *desc;
|
||||
desc++;
|
||||
|
|
|
@ -1,20 +1,11 @@
|
|||
#
|
||||
# HID driver configuration
|
||||
#
|
||||
menuconfig HID_SUPPORT
|
||||
bool "HID Devices"
|
||||
depends on INPUT
|
||||
default y
|
||||
---help---
|
||||
Say Y here to get to see options for various computer-human interface
|
||||
device drivers. This option alone does not add any kernel code.
|
||||
|
||||
If you say N, all options in this submenu will be skipped and disabled.
|
||||
|
||||
if HID_SUPPORT
|
||||
menu "HID support"
|
||||
depends on INPUT
|
||||
|
||||
config HID
|
||||
tristate "Generic HID support"
|
||||
tristate "HID bus support"
|
||||
depends on INPUT
|
||||
default y
|
||||
---help---
|
||||
|
@ -23,14 +14,17 @@ config HID
|
|||
most commonly used to refer to the USB-HID specification, but other
|
||||
devices (such as, but not strictly limited to, Bluetooth) are
|
||||
designed using HID specification (this involves certain keyboards,
|
||||
mice, tablets, etc). This option compiles into kernel the generic
|
||||
HID layer code (parser, usages, etc.), which can then be used by
|
||||
transport-specific HID implementation (like USB or Bluetooth).
|
||||
mice, tablets, etc). This option adds the HID bus to the kernel,
|
||||
together with generic HID layer code. The HID devices are added and
|
||||
removed from the HID bus by the transport-layer drivers, such as
|
||||
usbhid (USB_HID) and hidp (BT_HIDP).
|
||||
|
||||
For docs and specs, see http://www.usb.org/developers/hidpage/
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
if HID
|
||||
|
||||
config HID_BATTERY_STRENGTH
|
||||
bool "Battery level reporting for HID devices"
|
||||
depends on HID && POWER_SUPPLY && HID = POWER_SUPPLY
|
||||
|
@ -59,23 +53,22 @@ config HIDRAW
|
|||
|
||||
If unsure, say Y.
|
||||
|
||||
source "drivers/hid/usbhid/Kconfig"
|
||||
|
||||
menu "Special HID drivers"
|
||||
depends on HID
|
||||
|
||||
config HID_GENERIC
|
||||
tristate "Generic HID driver"
|
||||
depends on HID
|
||||
default y
|
||||
default HID
|
||||
---help---
|
||||
Support for generic HID devices.
|
||||
Support for generic devices on the HID bus. This includes most
|
||||
keyboards and mice, joysticks, tablets and digitizers.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called hid-generic.
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
menu "Special HID drivers"
|
||||
depends on HID
|
||||
|
||||
config HID_A4TECH
|
||||
tristate "A4 tech mice" if EXPERT
|
||||
depends on USB_HID
|
||||
|
@ -662,4 +655,8 @@ config HID_ZYDACRON
|
|||
|
||||
endmenu
|
||||
|
||||
endif # HID_SUPPORT
|
||||
endif # HID
|
||||
|
||||
source "drivers/hid/usbhid/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -1880,6 +1880,7 @@ static const struct hid_device_id hid_ignore_list[] = {
|
|||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AXENTIA, USB_DEVICE_ID_AXENTIA_FM_RADIO) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
|
||||
|
|
|
@ -160,6 +160,9 @@
|
|||
#define USB_VENDOR_ID_AVERMEDIA 0x07ca
|
||||
#define USB_DEVICE_ID_AVER_FM_MR800 0xb800
|
||||
|
||||
#define USB_VENDOR_ID_AXENTIA 0x12cf
|
||||
#define USB_DEVICE_ID_AXENTIA_FM_RADIO 0x7111
|
||||
|
||||
#define USB_VENDOR_ID_BAANTO 0x2453
|
||||
#define USB_DEVICE_ID_BAANTO_MT_190W2 0x0100
|
||||
|
||||
|
|
|
@ -436,27 +436,37 @@ static int logi_dj_recv_send_report(struct dj_receiver_dev *djrcv_dev,
|
|||
|
||||
static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
|
||||
{
|
||||
struct dj_report dj_report;
|
||||
struct dj_report *dj_report;
|
||||
int retval;
|
||||
|
||||
memset(&dj_report, 0, sizeof(dj_report));
|
||||
dj_report.report_id = REPORT_ID_DJ_SHORT;
|
||||
dj_report.device_index = 0xFF;
|
||||
dj_report.report_type = REPORT_TYPE_CMD_GET_PAIRED_DEVICES;
|
||||
return logi_dj_recv_send_report(djrcv_dev, &dj_report);
|
||||
dj_report = kzalloc(sizeof(dj_report), GFP_KERNEL);
|
||||
if (!dj_report)
|
||||
return -ENOMEM;
|
||||
dj_report->report_id = REPORT_ID_DJ_SHORT;
|
||||
dj_report->device_index = 0xFF;
|
||||
dj_report->report_type = REPORT_TYPE_CMD_GET_PAIRED_DEVICES;
|
||||
retval = logi_dj_recv_send_report(djrcv_dev, dj_report);
|
||||
kfree(dj_report);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev,
|
||||
unsigned timeout)
|
||||
{
|
||||
struct dj_report dj_report;
|
||||
struct dj_report *dj_report;
|
||||
int retval;
|
||||
|
||||
memset(&dj_report, 0, sizeof(dj_report));
|
||||
dj_report.report_id = REPORT_ID_DJ_SHORT;
|
||||
dj_report.device_index = 0xFF;
|
||||
dj_report.report_type = REPORT_TYPE_CMD_SWITCH;
|
||||
dj_report.report_params[CMD_SWITCH_PARAM_DEVBITFIELD] = 0x3F;
|
||||
dj_report.report_params[CMD_SWITCH_PARAM_TIMEOUT_SECONDS] = (u8)timeout;
|
||||
return logi_dj_recv_send_report(djrcv_dev, &dj_report);
|
||||
dj_report = kzalloc(sizeof(dj_report), GFP_KERNEL);
|
||||
if (!dj_report)
|
||||
return -ENOMEM;
|
||||
dj_report->report_id = REPORT_ID_DJ_SHORT;
|
||||
dj_report->device_index = 0xFF;
|
||||
dj_report->report_type = REPORT_TYPE_CMD_SWITCH;
|
||||
dj_report->report_params[CMD_SWITCH_PARAM_DEVBITFIELD] = 0x3F;
|
||||
dj_report->report_params[CMD_SWITCH_PARAM_TIMEOUT_SECONDS] = (u8)timeout;
|
||||
retval = logi_dj_recv_send_report(djrcv_dev, dj_report);
|
||||
kfree(dj_report);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -426,8 +426,10 @@ static void magicmouse_setup_input(struct input_dev *input, struct hid_device *h
|
|||
__set_bit(EV_ABS, input->evbit);
|
||||
|
||||
input_set_abs_params(input, ABS_MT_TRACKING_ID, 0, 15, 0, 0);
|
||||
input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 255, 4, 0);
|
||||
input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 255, 4, 0);
|
||||
input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 255 << 2,
|
||||
4, 0);
|
||||
input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 255 << 2,
|
||||
4, 0);
|
||||
input_set_abs_params(input, ABS_MT_ORIENTATION, -31, 32, 1, 0);
|
||||
|
||||
/* Note: Touch Y position from the device is inverted relative
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
comment "USB Input Devices"
|
||||
menu "USB HID support"
|
||||
depends on USB
|
||||
|
||||
config USB_HID
|
||||
tristate "USB Human Interface Device (full HID) support"
|
||||
tristate "USB HID transport layer"
|
||||
default y
|
||||
depends on USB && INPUT
|
||||
select HID
|
||||
---help---
|
||||
Say Y here if you want full HID support to connect USB keyboards,
|
||||
Say Y here if you want to connect USB keyboards,
|
||||
mice, joysticks, graphic tablets, or any other HID based devices
|
||||
to your computer via USB, as well as Uninterruptible Power Supply
|
||||
(UPS) and monitor control devices.
|
||||
|
@ -81,4 +81,4 @@ config USB_MOUSE
|
|||
|
||||
endmenu
|
||||
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
* Based on hdaps.c driver:
|
||||
* Copyright (C) 2005 Robert Love <rml@novell.com>
|
||||
* Copyright (C) 2005 Jesper Juhl <jesper.juhl@gmail.com>
|
||||
* Copyright (C) 2005 Jesper Juhl <jj@chaosbits.net>
|
||||
*
|
||||
* Fan control based on smcFanControl:
|
||||
* Copyright (C) 2006 Hendrik Holtmann <holtmann@mac.com>
|
||||
|
|
|
@ -693,7 +693,7 @@ static void __cpuinit get_core_online(unsigned int cpu)
|
|||
* sensors. We check this bit only, all the early CPUs
|
||||
* without thermal sensors will be filtered out.
|
||||
*/
|
||||
if (!cpu_has(c, X86_FEATURE_DTS))
|
||||
if (!cpu_has(c, X86_FEATURE_DTHERM))
|
||||
return;
|
||||
|
||||
if (!pdev) {
|
||||
|
@ -794,7 +794,7 @@ static struct notifier_block coretemp_cpu_notifier __refdata = {
|
|||
};
|
||||
|
||||
static const struct x86_cpu_id coretemp_ids[] = {
|
||||
{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_DTS },
|
||||
{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_DTHERM },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, coretemp_ids);
|
||||
|
|
|
@ -590,6 +590,6 @@ static struct jc42_data *jc42_update_device(struct device *dev)
|
|||
|
||||
module_i2c_driver(jc42_driver);
|
||||
|
||||
MODULE_AUTHOR("Guenter Roeck <guenter.roeck@ericsson.com>");
|
||||
MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
|
||||
MODULE_DESCRIPTION("JC42 driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -567,6 +567,6 @@ static struct i2c_driver pem_driver = {
|
|||
|
||||
module_i2c_driver(pem_driver);
|
||||
|
||||
MODULE_AUTHOR("Guenter Roeck <guenter.roeck@ericsson.com>");
|
||||
MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
|
||||
MODULE_DESCRIPTION("Lineage CPL PEM hardware monitoring driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -292,6 +292,6 @@ static struct i2c_driver ltc4261_driver = {
|
|||
|
||||
module_i2c_driver(ltc4261_driver);
|
||||
|
||||
MODULE_AUTHOR("Guenter Roeck <guenter.roeck@ericsson.com>");
|
||||
MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
|
||||
MODULE_DESCRIPTION("LTC4261 driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -692,6 +692,6 @@ static struct i2c_driver max16065_driver = {
|
|||
|
||||
module_i2c_driver(max16065_driver);
|
||||
|
||||
MODULE_AUTHOR("Guenter Roeck <guenter.roeck@ericsson.com>");
|
||||
MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
|
||||
MODULE_DESCRIPTION("MAX16065 driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -198,7 +198,6 @@ static int fops_open(struct file *file)
|
|||
struct saa7146_dev *dev = video_drvdata(file);
|
||||
struct saa7146_fh *fh = NULL;
|
||||
int result = 0;
|
||||
enum v4l2_buf_type type;
|
||||
|
||||
DEB_EE("file:%p, dev:%s\n", file, video_device_node_name(vdev));
|
||||
|
||||
|
@ -207,10 +206,6 @@ static int fops_open(struct file *file)
|
|||
|
||||
DEB_D("using: %p\n", dev);
|
||||
|
||||
type = vdev->vfl_type == VFL_TYPE_GRABBER
|
||||
? V4L2_BUF_TYPE_VIDEO_CAPTURE
|
||||
: V4L2_BUF_TYPE_VBI_CAPTURE;
|
||||
|
||||
/* check if an extension is registered */
|
||||
if( NULL == dev->ext ) {
|
||||
DEB_S("no extension registered for this device\n");
|
||||
|
|
|
@ -516,9 +516,9 @@ static int cx24110_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
if(cx24110_readreg(state,0x10)&0x40) {
|
||||
/* the RS error counter has finished one counting window */
|
||||
cx24110_writereg(state,0x10,0x60); /* select the byer reg */
|
||||
cx24110_readreg(state, 0x12) |
|
||||
(void)(cx24110_readreg(state, 0x12) |
|
||||
(cx24110_readreg(state, 0x13) << 8) |
|
||||
(cx24110_readreg(state, 0x14) << 16);
|
||||
(cx24110_readreg(state, 0x14) << 16));
|
||||
cx24110_writereg(state,0x10,0x70); /* select the bler reg */
|
||||
state->lastbler=cx24110_readreg(state,0x12)|
|
||||
(cx24110_readreg(state,0x13)<<8)|
|
||||
|
|
|
@ -121,7 +121,7 @@ int cxd2820r_get_frontend_c(struct dvb_frontend *fe)
|
|||
if (ret)
|
||||
goto error;
|
||||
|
||||
switch ((buf[0] >> 0) & 0x03) {
|
||||
switch ((buf[0] >> 0) & 0x07) {
|
||||
case 0:
|
||||
c->modulation = QAM_16;
|
||||
break;
|
||||
|
|
|
@ -126,7 +126,7 @@ static int lg216x_write_regs(struct lg216x_state *state,
|
|||
|
||||
lg_reg("writing %d registers...\n", len);
|
||||
|
||||
for (i = 0; i < len - 1; i++) {
|
||||
for (i = 0; i < len; i++) {
|
||||
ret = lg216x_write_reg(state, regs[i].reg, regs[i].val);
|
||||
if (lg_fail(ret))
|
||||
return ret;
|
||||
|
|
|
@ -544,6 +544,8 @@ static const struct usb_device_id smsusb_id_table[] __devinitconst = {
|
|||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xc0a0),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xf5a0),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ static int __devinit maxiradio_probe(struct pci_dev *pdev, const struct pci_devi
|
|||
goto err_out_free_region;
|
||||
|
||||
dev->io = pci_resource_start(pdev, 0);
|
||||
if (snd_tea575x_init(&dev->tea)) {
|
||||
if (snd_tea575x_init(&dev->tea, THIS_MODULE)) {
|
||||
printk(KERN_ERR "radio-maxiradio: Unable to detect TEA575x tuner\n");
|
||||
goto err_out_free_region;
|
||||
}
|
||||
|
|
|
@ -238,7 +238,7 @@ static int __devinit fmr2_probe(struct fmr2 *fmr2, struct device *pdev, int io)
|
|||
snprintf(fmr2->tea.bus_info, sizeof(fmr2->tea.bus_info), "%s:%s",
|
||||
fmr2->is_fmd2 ? "PnP" : "ISA", dev_name(pdev));
|
||||
|
||||
if (snd_tea575x_init(&fmr2->tea)) {
|
||||
if (snd_tea575x_init(&fmr2->tea, THIS_MODULE)) {
|
||||
printk(KERN_ERR "radio-sf16fmr2: Unable to detect TEA575x tuner\n");
|
||||
release_region(fmr2->io, 2);
|
||||
return -ENODEV;
|
||||
|
|
|
@ -51,6 +51,8 @@ static struct usb_device_id si470x_usb_driver_id_table[] = {
|
|||
{ USB_DEVICE_AND_INTERFACE_INFO(0x1b80, 0xd700, USB_CLASS_HID, 0, 0) },
|
||||
/* Sanei Electric, Inc. FM USB Radio (sold as DealExtreme.com PCear) */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x10c5, 0x819a, USB_CLASS_HID, 0, 0) },
|
||||
/* Axentia ALERT FM USB Receiver */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x12cf, 0x7111, USB_CLASS_HID, 0, 0) },
|
||||
/* Terminating entry */
|
||||
{ }
|
||||
};
|
||||
|
|
|
@ -371,7 +371,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -384,7 +383,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -398,7 +396,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomux = { 4, 0, 2, 3 },
|
||||
.gpiomute = 1,
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
|
@ -414,7 +411,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -427,7 +423,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0, 1, 0, 1 },
|
||||
.gpiomute = 3,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -440,7 +435,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0x0f,
|
||||
.gpiomux = { 0x0c, 0x04, 0x08, 0x04 },
|
||||
/* 0x04 for some cards ?? */
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.audio_mode_gpio= avermedia_tvphone_audio,
|
||||
|
@ -454,7 +448,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -469,7 +462,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0xc00, 0x800, 0x400 },
|
||||
.gpiomute = 0xc00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -482,7 +474,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 3,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 1, 1, 2, 3 },
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TEMIC_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -496,7 +487,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 0, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -510,7 +500,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20001,0x10001, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -524,7 +513,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 15,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 13, 14, 11, 7 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -536,7 +524,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 15,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 13, 14, 11, 7 },
|
||||
.needs_tvaudio = 1,
|
||||
.msp34xx_alt = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
|
@ -553,7 +540,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 2, 1, 3 }, /* old: {0, 1, 2, 3, 4} */
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -567,7 +553,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 1, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -583,7 +568,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
/* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
|
||||
.gpiomux = { 0x001e00, 0, 0x018000, 0x014000 },
|
||||
.gpiomute = 0x002000,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -597,7 +581,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1, 0),
|
||||
.gpiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007 },
|
||||
.gpiomute = 0xcfa007,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.volume_gpio = winview_volume,
|
||||
|
@ -611,7 +594,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 1, 0, 0, 0 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -660,7 +642,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 0x800, 0x400 },
|
||||
.gpiomute = 0xc00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -691,7 +672,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = {0x400, 0x400, 0x400, 0x400 },
|
||||
.gpiomute = 0xc00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -706,7 +686,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20000, 0x30000, 0x10000, 0 },
|
||||
.gpiomute = 0x40000,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.audio_mode_gpio= terratv_audio,
|
||||
|
@ -720,7 +699,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 0, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -748,7 +726,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20000, 0x30000, 0x10000, 0x00000 },
|
||||
.gpiomute = 0x40000,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.audio_mode_gpio= terratv_audio,
|
||||
|
@ -793,7 +770,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.muxsel_hook = PXC200_muxsel,
|
||||
|
@ -834,7 +810,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -847,7 +822,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x500, 0, 0x300, 0x900 },
|
||||
.gpiomute = 0x900,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -874,7 +848,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
Note: There exists another variant "Winfast 2000" with tv stereo !?
|
||||
Note: eeprom only contains FF and pci subsystem id 107d:6606
|
||||
*/
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.has_radio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_PAL, /* default for now, gpio reads BFFF06 for Pal bg+dk */
|
||||
|
@ -934,7 +907,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0x551400, 0x551200, 0, 0 },
|
||||
.gpiomute = 0x551c00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -949,7 +921,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0xd0001, 0, 0 },
|
||||
.gpiomute = 1,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -966,7 +937,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomux = { 4, 0, 2, 3 },
|
||||
.gpiomute = 1,
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
|
@ -980,7 +950,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 15,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 13, 4, 11, 7 },
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -995,7 +964,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 0, 0},
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
|
@ -1066,7 +1034,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20000, 0x30000, 0x10000, 0 },
|
||||
.gpiomute = 0x40000,
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_35,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
|
@ -1084,7 +1051,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = {2,0,0,0 },
|
||||
.gpiomute = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1163,7 +1129,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
MUX2 (mask 0x30000):
|
||||
0,2,3= from MSP34xx
|
||||
1= FM stereo Radio from Tuner */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1179,7 +1144,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 0x10, 8 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1218,7 +1182,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TEMIC_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1250,7 +1213,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(3, 1),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_35,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
|
@ -1266,7 +1228,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x400, 0x400, 0x400, 0x400 },
|
||||
.gpiomute = 0x800,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TEMIC_4036FY5_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1312,7 +1273,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 2),
|
||||
.gpiomux = { },
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1329,7 +1289,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 1, 0, 4, 4 },
|
||||
.gpiomute = 9,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1379,7 +1338,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomute = 0x1800,
|
||||
.audio_mode_gpio= fv2000s_audio,
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1393,7 +1351,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x500, 0x500, 0x300, 0x900 },
|
||||
.gpiomute = 0x900,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1477,7 +1434,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 11, 7 }, /* TV and Radio with same GPIO ! */
|
||||
.gpiomute = 13,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_LG_PAL_I_FM,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1514,7 +1470,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x01, 0x00, 0x03, 0x03 },
|
||||
.gpiomute = 0x09,
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
|
@ -1540,7 +1495,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -1567,7 +1521,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
|
@ -1597,7 +1550,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
|
@ -1619,7 +1571,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
* btwincap uses 0x80000/0x80003
|
||||
*/
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
|
@ -1655,7 +1606,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
/* .audio_inputs= 1, */
|
||||
.svhs = 2,
|
||||
.muxsel = MUXSEL(2, 0, 1, 1),
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -1875,7 +1825,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3},
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
|
@ -1902,7 +1851,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
|
@ -1920,7 +1868,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
/* Tuner, Radio, external, internal, off, on */
|
||||
.gpiomux = { 0x08, 0x0f, 0x0a, 0x08 },
|
||||
.gpiomute = 0x0f,
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
|
@ -1936,7 +1883,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.svhs = 2,
|
||||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
|
@ -2034,7 +1980,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
|
@ -2049,7 +1994,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2062,7 +2006,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2079,7 +2022,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 0),
|
||||
.muxsel_hook = phytec_muxsel,
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2094,7 +2036,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 1),
|
||||
.muxsel_hook = phytec_muxsel,
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2118,7 +2059,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.svhs = NO_SVHS, /* card has no svhs */
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.no_tda7432 = 1,
|
||||
.gpiomask = 0x00,
|
||||
|
@ -2168,7 +2108,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 3,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 1, 1, 1, 1 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_35,
|
||||
|
@ -2210,7 +2149,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.no_msp34xx = 1,
|
||||
.no_tda7432 = 1,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
|
@ -2222,7 +2160,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.svhs = 2,
|
||||
.needs_tvaudio = 0,
|
||||
.gpiomask = 0x68,
|
||||
.muxsel = MUXSEL(2, 3, 1),
|
||||
.gpiomux = { 0x68, 0x68, 0x61, 0x61 },
|
||||
|
@ -2241,7 +2178,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 },
|
||||
.gpiomute = 3,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2265,7 +2201,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 2, 2, 2),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.pll = PLL_28,
|
||||
.needs_tvaudio = 0,
|
||||
.muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2358,7 +2293,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2405,7 +2339,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.tuner_addr = ADDR_UNSET,
|
||||
.gpiomask = 0x008007,
|
||||
.gpiomux = { 0, 0x000001,0,0 },
|
||||
.needs_tvaudio = 1,
|
||||
.has_radio = 1,
|
||||
},
|
||||
[BTTV_BOARD_TIBET_CS16] = {
|
||||
|
@ -2518,7 +2451,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x001e00, 0, 0x018000, 0x014000 },
|
||||
.gpiomute = 0x002000,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_YMEC_TVF66T5_B_DFF,
|
||||
.tuner_addr = 0xc1 >>1,
|
||||
|
@ -2534,7 +2466,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 },
|
||||
.gpiomute = 3,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TENA_9533_DI,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2615,7 +2546,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2714,7 +2644,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20001,0x10001, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2746,7 +2675,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 }, /* CONTVFMi */
|
||||
.gpiomute = 3, /* CONTVFMi */
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_FM1216ME_MK3, /* TCL MK3 */
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
|
@ -2785,7 +2713,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(0, 2, 3, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2799,7 +2726,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2813,7 +2739,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(3, 2, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
|
@ -2877,7 +2802,6 @@ struct tvcard bttv_tvcards[] = {
|
|||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
|
@ -3649,7 +3573,7 @@ void __devinit bttv_init_tuner(struct bttv *btv)
|
|||
struct tuner_setup tun_setup;
|
||||
|
||||
/* Load tuner module before issuing tuner config call! */
|
||||
if (bttv_tvcards[btv->c.type].has_radio)
|
||||
if (btv->has_radio)
|
||||
v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
|
||||
&btv->c.i2c_adap, "tuner",
|
||||
0, v4l2_i2c_tuner_addrs(ADDRS_RADIO));
|
||||
|
@ -3664,7 +3588,7 @@ void __devinit bttv_init_tuner(struct bttv *btv)
|
|||
tun_setup.type = btv->tuner_type;
|
||||
tun_setup.addr = addr;
|
||||
|
||||
if (bttv_tvcards[btv->c.type].has_radio)
|
||||
if (btv->has_radio)
|
||||
tun_setup.mode_mask |= T_RADIO;
|
||||
|
||||
bttv_call_all(btv, tuner, s_type_addr, &tun_setup);
|
||||
|
@ -3724,6 +3648,10 @@ static void __devinit hauppauge_eeprom(struct bttv *btv)
|
|||
bttv_tvcards[BTTV_BOARD_HAUPPAUGE_IMPACTVCB].name);
|
||||
btv->c.type = BTTV_BOARD_HAUPPAUGE_IMPACTVCB;
|
||||
}
|
||||
|
||||
/* The 61334 needs the msp3410 to do the radio demod to get sound */
|
||||
if (tv.model == 61334)
|
||||
btv->radio_uses_msp_demodulator = 1;
|
||||
}
|
||||
|
||||
static int terratec_active_radio_upgrade(struct bttv *btv)
|
||||
|
|
|
@ -1218,6 +1218,11 @@ audio_mux(struct bttv *btv, int input, int mute)
|
|||
For now this is sufficient. */
|
||||
switch (input) {
|
||||
case TVAUDIO_INPUT_RADIO:
|
||||
/* Some boards need the msp do to the radio demod */
|
||||
if (btv->radio_uses_msp_demodulator) {
|
||||
in = MSP_INPUT_DEFAULT;
|
||||
break;
|
||||
}
|
||||
in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
|
||||
MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
|
||||
break;
|
||||
|
|
|
@ -236,7 +236,6 @@ struct tvcard {
|
|||
/* i2c audio flags */
|
||||
unsigned int no_msp34xx:1;
|
||||
unsigned int no_tda7432:1;
|
||||
unsigned int needs_tvaudio:1;
|
||||
unsigned int msp34xx_alt:1;
|
||||
/* Note: currently no card definition needs to mark the presence
|
||||
of a RDS saa6588 chip. If this is ever needed, then add a new
|
||||
|
|
|
@ -440,6 +440,7 @@ struct bttv {
|
|||
/* radio data/state */
|
||||
int has_radio;
|
||||
int radio_user;
|
||||
int radio_uses_msp_demodulator;
|
||||
|
||||
/* miro/pinnacle + Aimslab VHX
|
||||
philips matchbox (tea5757 radio tuner) support */
|
||||
|
|
|
@ -607,8 +607,9 @@ static long qc_capture(struct qcam *q, char __user *buf, unsigned long len)
|
|||
}
|
||||
o = i * pixels_per_line + pixels_read + k;
|
||||
if (o < len) {
|
||||
u8 ch = invert - buffer[k];
|
||||
got++;
|
||||
put_user((invert - buffer[k]) << shift, buf + o);
|
||||
put_user(ch << shift, buf + o);
|
||||
}
|
||||
}
|
||||
pixels_read += bytes;
|
||||
|
@ -648,8 +649,8 @@ static int qcam_querycap(struct file *file, void *priv,
|
|||
struct qcam *qcam = video_drvdata(file);
|
||||
|
||||
strlcpy(vcap->driver, qcam->v4l2_dev.name, sizeof(vcap->driver));
|
||||
strlcpy(vcap->card, "B&W Quickcam", sizeof(vcap->card));
|
||||
strlcpy(vcap->bus_info, "parport", sizeof(vcap->bus_info));
|
||||
strlcpy(vcap->card, "Connectix B&W Quickcam", sizeof(vcap->card));
|
||||
strlcpy(vcap->bus_info, qcam->pport->name, sizeof(vcap->bus_info));
|
||||
vcap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE;
|
||||
vcap->capabilities = vcap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
return 0;
|
||||
|
@ -688,8 +689,8 @@ static int qcam_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *f
|
|||
pix->height = qcam->height / qcam->transfer_scale;
|
||||
pix->pixelformat = (qcam->bpp == 4) ? V4L2_PIX_FMT_Y4 : V4L2_PIX_FMT_Y6;
|
||||
pix->field = V4L2_FIELD_NONE;
|
||||
pix->bytesperline = qcam->width;
|
||||
pix->sizeimage = qcam->width * qcam->height;
|
||||
pix->bytesperline = pix->width;
|
||||
pix->sizeimage = pix->width * pix->height;
|
||||
/* Just a guess */
|
||||
pix->colorspace = V4L2_COLORSPACE_SRGB;
|
||||
return 0;
|
||||
|
@ -757,7 +758,7 @@ static int qcam_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes
|
|||
"4-Bit Monochrome", V4L2_PIX_FMT_Y4,
|
||||
{ 0, 0, 0, 0 }
|
||||
},
|
||||
{ 0, 0, 0,
|
||||
{ 1, 0, 0,
|
||||
"6-Bit Monochrome", V4L2_PIX_FMT_Y6,
|
||||
{ 0, 0, 0, 0 }
|
||||
},
|
||||
|
@ -772,6 +773,25 @@ static int qcam_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int qcam_enum_framesizes(struct file *file, void *fh,
|
||||
struct v4l2_frmsizeenum *fsize)
|
||||
{
|
||||
static const struct v4l2_frmsize_discrete sizes[] = {
|
||||
{ 80, 60 },
|
||||
{ 160, 120 },
|
||||
{ 320, 240 },
|
||||
};
|
||||
|
||||
if (fsize->index > 2)
|
||||
return -EINVAL;
|
||||
if (fsize->pixel_format != V4L2_PIX_FMT_Y4 &&
|
||||
fsize->pixel_format != V4L2_PIX_FMT_Y6)
|
||||
return -EINVAL;
|
||||
fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
|
||||
fsize->discrete = sizes[fsize->index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t qcam_read(struct file *file, char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
|
@ -795,6 +815,11 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
|
|||
return len;
|
||||
}
|
||||
|
||||
static unsigned int qcam_poll(struct file *filp, poll_table *wait)
|
||||
{
|
||||
return v4l2_ctrl_poll(filp, wait) | POLLIN | POLLRDNORM;
|
||||
}
|
||||
|
||||
static int qcam_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct qcam *qcam =
|
||||
|
@ -828,7 +853,7 @@ static const struct v4l2_file_operations qcam_fops = {
|
|||
.owner = THIS_MODULE,
|
||||
.open = v4l2_fh_open,
|
||||
.release = v4l2_fh_release,
|
||||
.poll = v4l2_ctrl_poll,
|
||||
.poll = qcam_poll,
|
||||
.unlocked_ioctl = video_ioctl2,
|
||||
.read = qcam_read,
|
||||
};
|
||||
|
@ -839,6 +864,7 @@ static const struct v4l2_ioctl_ops qcam_ioctl_ops = {
|
|||
.vidioc_s_input = qcam_s_input,
|
||||
.vidioc_enum_input = qcam_enum_input,
|
||||
.vidioc_enum_fmt_vid_cap = qcam_enum_fmt_vid_cap,
|
||||
.vidioc_enum_framesizes = qcam_enum_framesizes,
|
||||
.vidioc_g_fmt_vid_cap = qcam_g_fmt_vid_cap,
|
||||
.vidioc_s_fmt_vid_cap = qcam_s_fmt_vid_cap,
|
||||
.vidioc_try_fmt_vid_cap = qcam_try_fmt_vid_cap,
|
||||
|
@ -864,9 +890,9 @@ static struct qcam *qcam_init(struct parport *port)
|
|||
return NULL;
|
||||
|
||||
v4l2_dev = &qcam->v4l2_dev;
|
||||
strlcpy(v4l2_dev->name, "bw-qcam", sizeof(v4l2_dev->name));
|
||||
snprintf(v4l2_dev->name, sizeof(v4l2_dev->name), "bw-qcam%d", num_cams);
|
||||
|
||||
if (v4l2_device_register(NULL, v4l2_dev) < 0) {
|
||||
if (v4l2_device_register(port->dev, v4l2_dev) < 0) {
|
||||
v4l2_err(v4l2_dev, "Could not register v4l2_device\n");
|
||||
kfree(qcam);
|
||||
return NULL;
|
||||
|
@ -886,7 +912,7 @@ static struct qcam *qcam_init(struct parport *port)
|
|||
return NULL;
|
||||
}
|
||||
qcam->pport = port;
|
||||
qcam->pdev = parport_register_device(port, "bw-qcam", NULL, NULL,
|
||||
qcam->pdev = parport_register_device(port, v4l2_dev->name, NULL, NULL,
|
||||
NULL, 0, NULL);
|
||||
if (qcam->pdev == NULL) {
|
||||
v4l2_err(v4l2_dev, "couldn't register for %s.\n", port->name);
|
||||
|
@ -975,6 +1001,7 @@ static int init_bwqcam(struct parport *port)
|
|||
return -ENODEV;
|
||||
}
|
||||
qc_calibrate(qcam);
|
||||
v4l2_ctrl_handler_setup(&qcam->hdl);
|
||||
|
||||
parport_release(qcam->pdev);
|
||||
|
||||
|
|
|
@ -838,10 +838,10 @@ static int cx18_setup_pci(struct cx18 *cx, struct pci_dev *pci_dev,
|
|||
}
|
||||
|
||||
CX18_DEBUG_INFO("cx%d (rev %d) at %02x:%02x.%x, "
|
||||
"irq: %d, latency: %d, memory: 0x%lx\n",
|
||||
"irq: %d, latency: %d, memory: 0x%llx\n",
|
||||
cx->pci_dev->device, cx->card_rev, pci_dev->bus->number,
|
||||
PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn),
|
||||
cx->pci_dev->irq, pci_latency, (unsigned long)cx->base_addr);
|
||||
cx->pci_dev->irq, pci_latency, (u64)cx->base_addr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -938,7 +938,7 @@ static int __devinit cx18_probe(struct pci_dev *pci_dev,
|
|||
if (retval)
|
||||
goto err;
|
||||
|
||||
CX18_DEBUG_INFO("base addr: 0x%08x\n", cx->base_addr);
|
||||
CX18_DEBUG_INFO("base addr: 0x%llx\n", (u64)cx->base_addr);
|
||||
|
||||
/* PCI Device Setup */
|
||||
retval = cx18_setup_pci(cx, pci_dev, pci_id);
|
||||
|
@ -946,8 +946,8 @@ static int __devinit cx18_probe(struct pci_dev *pci_dev,
|
|||
goto free_workqueues;
|
||||
|
||||
/* map io memory */
|
||||
CX18_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
|
||||
cx->base_addr + CX18_MEM_OFFSET, CX18_MEM_SIZE);
|
||||
CX18_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
|
||||
(u64)cx->base_addr + CX18_MEM_OFFSET, CX18_MEM_SIZE);
|
||||
cx->enc_mem = ioremap_nocache(cx->base_addr + CX18_MEM_OFFSET,
|
||||
CX18_MEM_SIZE);
|
||||
if (!cx->enc_mem) {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue