mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branch 'iov_iter' into for-next
This commit is contained in:
commit
ba00410b81
1101 changed files with 10861 additions and 7898 deletions
|
|
@ -364,6 +364,9 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
|
|||
goto out;
|
||||
}
|
||||
|
||||
/* create a nice device name */
|
||||
sprintf(dev->name, "saa7146 (%d)", saa7146_num);
|
||||
|
||||
DEB_EE("pci:%p\n", pci);
|
||||
|
||||
err = pci_enable_device(pci);
|
||||
|
|
@ -438,9 +441,6 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
|
|||
|
||||
/* the rest + print status message */
|
||||
|
||||
/* create a nice device name */
|
||||
sprintf(dev->name, "saa7146 (%d)", saa7146_num);
|
||||
|
||||
pr_info("found saa7146 @ mem %p (revision %d, irq %d) (0x%04x,0x%04x)\n",
|
||||
dev->mem, dev->revision, pci->irq,
|
||||
pci->subsystem_vendor, pci->subsystem_device);
|
||||
|
|
|
|||
|
|
@ -962,6 +962,11 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe)
|
|||
case SYS_ATSC:
|
||||
c->modulation = VSB_8;
|
||||
break;
|
||||
case SYS_ISDBS:
|
||||
c->symbol_rate = 28860000;
|
||||
c->rolloff = ROLLOFF_35;
|
||||
c->bandwidth_hz = c->symbol_rate / 100 * 135;
|
||||
break;
|
||||
default:
|
||||
c->modulation = QAM_AUTO;
|
||||
break;
|
||||
|
|
@ -2072,6 +2077,7 @@ static int dtv_set_frontend(struct dvb_frontend *fe)
|
|||
break;
|
||||
case SYS_DVBS:
|
||||
case SYS_TURBO:
|
||||
case SYS_ISDBS:
|
||||
rolloff = 135;
|
||||
break;
|
||||
case SYS_DVBS2:
|
||||
|
|
|
|||
|
|
@ -864,6 +864,13 @@ struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
|
|||
memcpy(&state->frontend.ops, &ds3000_ops,
|
||||
sizeof(struct dvb_frontend_ops));
|
||||
state->frontend.demodulator_priv = state;
|
||||
|
||||
/*
|
||||
* Some devices like T480 starts with voltage on. Be sure
|
||||
* to turn voltage off during init, as this can otherwise
|
||||
* interfere with Unicable SCR systems.
|
||||
*/
|
||||
ds3000_set_voltage(&state->frontend, SEC_VOLTAGE_OFF);
|
||||
return &state->frontend;
|
||||
|
||||
error3:
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ int sp2_ci_poll_slot_status(struct dvb_ca_en50221 *en50221,
|
|||
return s->status;
|
||||
}
|
||||
|
||||
int sp2_init(struct sp2 *s)
|
||||
static int sp2_init(struct sp2 *s)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf;
|
||||
|
|
@ -348,7 +348,7 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int sp2_exit(struct i2c_client *client)
|
||||
static int sp2_exit(struct i2c_client *client)
|
||||
{
|
||||
struct sp2 *s;
|
||||
|
||||
|
|
|
|||
|
|
@ -216,32 +216,30 @@ static int tc90522s_get_frontend(struct dvb_frontend *fe)
|
|||
c->delivery_system = SYS_ISDBS;
|
||||
|
||||
layers = 0;
|
||||
ret = reg_read(state, 0xe8, val, 3);
|
||||
ret = reg_read(state, 0xe6, val, 5);
|
||||
if (ret == 0) {
|
||||
int slots;
|
||||
u8 v;
|
||||
|
||||
c->stream_id = val[0] << 8 | val[1];
|
||||
|
||||
/* high/single layer */
|
||||
v = (val[0] & 0x70) >> 4;
|
||||
v = (val[2] & 0x70) >> 4;
|
||||
c->modulation = (v == 7) ? PSK_8 : QPSK;
|
||||
c->fec_inner = fec_conv_sat[v];
|
||||
c->layer[0].fec = c->fec_inner;
|
||||
c->layer[0].modulation = c->modulation;
|
||||
c->layer[0].segment_count = val[1] & 0x3f; /* slots */
|
||||
c->layer[0].segment_count = val[3] & 0x3f; /* slots */
|
||||
|
||||
/* low layer */
|
||||
v = (val[0] & 0x07);
|
||||
v = (val[2] & 0x07);
|
||||
c->layer[1].fec = fec_conv_sat[v];
|
||||
if (v == 0) /* no low layer */
|
||||
c->layer[1].segment_count = 0;
|
||||
else
|
||||
c->layer[1].segment_count = val[2] & 0x3f; /* slots */
|
||||
c->layer[1].segment_count = val[4] & 0x3f; /* slots */
|
||||
/* actually, BPSK if v==1, but not defined in fe_modulation_t */
|
||||
c->layer[1].modulation = QPSK;
|
||||
layers = (v > 0) ? 2 : 1;
|
||||
|
||||
slots = c->layer[0].segment_count + c->layer[1].segment_count;
|
||||
c->symbol_rate = 28860000 * slots / 48;
|
||||
}
|
||||
|
||||
/* statistics */
|
||||
|
|
@ -363,7 +361,7 @@ static int tc90522t_get_frontend(struct dvb_frontend *fe)
|
|||
u8 v;
|
||||
|
||||
c->isdbt_partial_reception = val[0] & 0x01;
|
||||
c->isdbt_sb_mode = (val[0] & 0xc0) == 0x01;
|
||||
c->isdbt_sb_mode = (val[0] & 0xc0) == 0x40;
|
||||
|
||||
/* layer A */
|
||||
v = (val[2] & 0x78) >> 3;
|
||||
|
|
|
|||
|
|
@ -1600,6 +1600,7 @@ static int dvb_register(struct cx23885_tsport *port)
|
|||
break;
|
||||
|
||||
/* attach tuner */
|
||||
memset(&m88ts2022_config, 0, sizeof(m88ts2022_config));
|
||||
m88ts2022_config.fe = fe0->dvb.frontend;
|
||||
m88ts2022_config.clock = 27000000;
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
|
|
@ -1635,6 +1636,7 @@ static int dvb_register(struct cx23885_tsport *port)
|
|||
/* port c - terrestrial/cable */
|
||||
case 2:
|
||||
/* attach frontend */
|
||||
memset(&si2168_config, 0, sizeof(si2168_config));
|
||||
si2168_config.i2c_adapter = &adapter;
|
||||
si2168_config.fe = &fe0->dvb.frontend;
|
||||
si2168_config.ts_mode = SI2168_TS_SERIAL;
|
||||
|
|
@ -1654,6 +1656,7 @@ static int dvb_register(struct cx23885_tsport *port)
|
|||
port->i2c_client_demod = client_demod;
|
||||
|
||||
/* attach tuner */
|
||||
memset(&si2157_config, 0, sizeof(si2157_config));
|
||||
si2157_config.fe = fe0->dvb.frontend;
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(info.type, "si2157", I2C_NAME_SIZE);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
config VIDEO_TW68
|
||||
tristate "Techwell tw68x Video For Linux"
|
||||
depends on VIDEO_DEV && PCI && VIDEO_V4L2
|
||||
select I2C_ALGOBIT
|
||||
select VIDEOBUF2_DMA_SG
|
||||
---help---
|
||||
Support for Techwell tw68xx based frame grabber boards.
|
||||
|
|
|
|||
|
|
@ -306,7 +306,7 @@ static int tw68_initdev(struct pci_dev *pci_dev,
|
|||
|
||||
/* get irq */
|
||||
err = devm_request_irq(&pci_dev->dev, pci_dev->irq, tw68_irq,
|
||||
IRQF_SHARED | IRQF_DISABLED, dev->name, dev);
|
||||
IRQF_SHARED, dev->name, dev);
|
||||
if (err < 0) {
|
||||
pr_err("%s: can't get IRQ %d\n",
|
||||
dev->name, pci_dev->irq);
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ config VIDEO_MEM2MEM_DEINTERLACE
|
|||
config VIDEO_SAMSUNG_S5P_G2D
|
||||
tristate "Samsung S5P and EXYNOS4 G2D 2d graphics accelerator driver"
|
||||
depends on VIDEO_DEV && VIDEO_V4L2
|
||||
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on HAS_DMA
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
select V4L2_MEM2MEM_DEV
|
||||
|
|
@ -178,7 +178,7 @@ config VIDEO_SAMSUNG_S5P_G2D
|
|||
config VIDEO_SAMSUNG_S5P_JPEG
|
||||
tristate "Samsung S5P/Exynos3250/Exynos4 JPEG codec driver"
|
||||
depends on VIDEO_DEV && VIDEO_V4L2
|
||||
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on HAS_DMA
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
select V4L2_MEM2MEM_DEV
|
||||
|
|
@ -189,7 +189,7 @@ config VIDEO_SAMSUNG_S5P_JPEG
|
|||
config VIDEO_SAMSUNG_S5P_MFC
|
||||
tristate "Samsung S5P MFC Video Codec"
|
||||
depends on VIDEO_DEV && VIDEO_V4L2
|
||||
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on HAS_DMA
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
default n
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
config VIDEO_SAMSUNG_EXYNOS4_IS
|
||||
bool "Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver"
|
||||
depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
|
||||
depends on (PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST)
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on OF && COMMON_CLK
|
||||
help
|
||||
Say Y here to enable camera host interface devices for
|
||||
|
|
|
|||
|
|
@ -832,6 +832,7 @@ err:
|
|||
return -ENXIO;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_PM_RUNTIME) || defined(CONFIG_PM_SLEEP)
|
||||
static int fimc_m2m_suspend(struct fimc_dev *fimc)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
@ -870,6 +871,7 @@ static int fimc_m2m_resume(struct fimc_dev *fimc)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_RUNTIME || CONFIG_PM_SLEEP */
|
||||
|
||||
static const struct of_device_id fimc_of_match[];
|
||||
|
||||
|
|
|
|||
|
|
@ -893,7 +893,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,
|
|||
unsigned long buffer, unsigned long size,
|
||||
struct s5p_jpeg_ctx *ctx)
|
||||
{
|
||||
int c, components, notfound;
|
||||
int c, components = 0, notfound;
|
||||
unsigned int height, width, word, subsampling = 0;
|
||||
long length;
|
||||
struct s5p_jpeg_buffer jpeg_buffer;
|
||||
|
|
@ -2632,6 +2632,7 @@ static int s5p_jpeg_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_PM_RUNTIME) || defined(CONFIG_PM_SLEEP)
|
||||
static int s5p_jpeg_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct s5p_jpeg *jpeg = dev_get_drvdata(dev);
|
||||
|
|
@ -2681,7 +2682,9 @@ static int s5p_jpeg_runtime_resume(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_RUNTIME || CONFIG_PM_SLEEP */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int s5p_jpeg_suspend(struct device *dev)
|
||||
{
|
||||
if (pm_runtime_suspended(dev))
|
||||
|
|
@ -2697,6 +2700,7 @@ static int s5p_jpeg_resume(struct device *dev)
|
|||
|
||||
return s5p_jpeg_runtime_resume(dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct dev_pm_ops s5p_jpeg_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(s5p_jpeg_suspend, s5p_jpeg_resume)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
config VIDEO_SAMSUNG_S5P_TV
|
||||
bool "Samsung TV driver for S5P platform"
|
||||
depends on PM_RUNTIME
|
||||
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||
default n
|
||||
---help---
|
||||
Say Y here to enable selecting the TV output devices for
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
config VIDEO_VIVID
|
||||
tristate "Virtual Video Test Driver"
|
||||
depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64
|
||||
depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64 && FB
|
||||
select FONT_SUPPORT
|
||||
select FONT_8x16
|
||||
select FB_CFB_FILLRECT
|
||||
select FB_CFB_COPYAREA
|
||||
select FB_CFB_IMAGEBLIT
|
||||
select VIDEOBUF2_VMALLOC
|
||||
default n
|
||||
---help---
|
||||
|
|
|
|||
|
|
@ -100,11 +100,9 @@ MODULE_PARM_DESC(ccs_out_mode, " output crop/compose/scale mode:\n"
|
|||
"\t\t bit 0=crop, 1=compose, 2=scale,\n"
|
||||
"\t\t -1=user-controlled (default)");
|
||||
|
||||
static unsigned multiplanar[VIVID_MAX_DEVS];
|
||||
static unsigned multiplanar[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 1 };
|
||||
module_param_array(multiplanar, uint, NULL, 0444);
|
||||
MODULE_PARM_DESC(multiplanar, " 0 (default) is alternating single and multiplanar devices,\n"
|
||||
"\t\t 1 is single planar devices,\n"
|
||||
"\t\t 2 is multiplanar devices");
|
||||
MODULE_PARM_DESC(multiplanar, " 1 (default) creates a single planar device, 2 creates a multiplanar device.");
|
||||
|
||||
/* Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr + vbi-out + vid-out */
|
||||
static unsigned node_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0x1d3d };
|
||||
|
|
@ -669,10 +667,7 @@ static int __init vivid_create_instance(int inst)
|
|||
/* start detecting feature set */
|
||||
|
||||
/* do we use single- or multi-planar? */
|
||||
if (multiplanar[inst] == 0)
|
||||
dev->multiplanar = inst & 1;
|
||||
else
|
||||
dev->multiplanar = multiplanar[inst] > 1;
|
||||
dev->multiplanar = multiplanar[inst] > 1;
|
||||
v4l2_info(&dev->v4l2_dev, "using %splanar format API\n",
|
||||
dev->multiplanar ? "multi" : "single ");
|
||||
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ int tpg_alloc(struct tpg_data *tpg, unsigned max_w)
|
|||
tpg->black_line[plane] = vzalloc(max_w * pixelsz);
|
||||
if (!tpg->black_line[plane])
|
||||
return -ENOMEM;
|
||||
tpg->random_line[plane] = vzalloc(max_w * pixelsz);
|
||||
tpg->random_line[plane] = vzalloc(max_w * 2 * pixelsz);
|
||||
if (!tpg->random_line[plane])
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1256,7 +1256,7 @@ static int fm_download_firmware(struct fmdev *fmdev, const u8 *fw_name)
|
|||
fmerr("Unable to read firmware(%s) content\n", fw_name);
|
||||
return ret;
|
||||
}
|
||||
fmdbg("Firmware(%s) length : %d bytes\n", fw_name, fw_entry->size);
|
||||
fmdbg("Firmware(%s) length : %zu bytes\n", fw_name, fw_entry->size);
|
||||
|
||||
fw_data = (void *)fw_entry->data;
|
||||
fw_len = fw_entry->size;
|
||||
|
|
|
|||
|
|
@ -1678,7 +1678,8 @@ static void imon_incoming_packet(struct imon_context *ictx,
|
|||
if (press_type == 0)
|
||||
rc_keyup(ictx->rdev);
|
||||
else {
|
||||
if (ictx->rc_type == RC_BIT_RC6_MCE)
|
||||
if (ictx->rc_type == RC_BIT_RC6_MCE ||
|
||||
ictx->rc_type == RC_BIT_OTHER)
|
||||
rc_keydown(ictx->rdev,
|
||||
ictx->rc_type == RC_BIT_RC6_MCE ? RC_TYPE_RC6_MCE : RC_TYPE_OTHER,
|
||||
ictx->rc_scancode, ictx->rc_toggle);
|
||||
|
|
|
|||
|
|
@ -297,7 +297,7 @@ static int hix5hd2_ir_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int hix5hd2_ir_suspend(struct device *dev)
|
||||
{
|
||||
struct hix5hd2_ir_priv *priv = dev_get_drvdata(dev);
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ static int ir_rc5_decode(struct rc_dev *dev, struct ir_raw_event ev)
|
|||
u32 scancode;
|
||||
enum rc_type protocol;
|
||||
|
||||
if (!(dev->enabled_protocols & (RC_BIT_RC5 | RC_BIT_RC5X)))
|
||||
if (!(dev->enabled_protocols & (RC_BIT_RC5 | RC_BIT_RC5X | RC_BIT_RC5_SZ)))
|
||||
return 0;
|
||||
|
||||
if (!is_timing_event(ev)) {
|
||||
|
|
|
|||
|
|
@ -262,7 +262,6 @@ int ir_raw_event_register(struct rc_dev *dev)
|
|||
return -ENOMEM;
|
||||
|
||||
dev->raw->dev = dev;
|
||||
dev->enabled_protocols = ~0;
|
||||
dev->change_protocol = change_protocol;
|
||||
rc = kfifo_alloc(&dev->raw->kfifo,
|
||||
sizeof(struct ir_raw_event) * MAX_IR_EVENT_SIZE,
|
||||
|
|
|
|||
|
|
@ -1421,6 +1421,8 @@ int rc_register_device(struct rc_dev *dev)
|
|||
|
||||
if (dev->change_protocol) {
|
||||
u64 rc_type = (1 << rc_map->rc_type);
|
||||
if (dev->driver_type == RC_DRIVER_IR_RAW)
|
||||
rc_type |= RC_BIT_LIRC;
|
||||
rc = dev->change_protocol(dev, &rc_type);
|
||||
if (rc < 0)
|
||||
goto out_raw;
|
||||
|
|
|
|||
|
|
@ -1333,9 +1333,9 @@ static int xc5000_release(struct dvb_frontend *fe)
|
|||
|
||||
if (priv) {
|
||||
cancel_delayed_work(&priv->timer_sleep);
|
||||
hybrid_tuner_release_state(priv);
|
||||
if (priv->firmware)
|
||||
release_firmware(priv->firmware);
|
||||
hybrid_tuner_release_state(priv);
|
||||
}
|
||||
|
||||
mutex_unlock(&xc5000_list_mutex);
|
||||
|
|
|
|||
|
|
@ -193,8 +193,8 @@ static int af9035_wr_reg_mask(struct dvb_usb_device *d, u32 reg, u8 val,
|
|||
return af9035_wr_regs(d, reg, &val, 1);
|
||||
}
|
||||
|
||||
static int af9035_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr,
|
||||
void *platform_data, struct i2c_adapter *adapter)
|
||||
static int af9035_add_i2c_dev(struct dvb_usb_device *d, const char *type,
|
||||
u8 addr, void *platform_data, struct i2c_adapter *adapter)
|
||||
{
|
||||
int ret, num;
|
||||
struct state *state = d_to_priv(d);
|
||||
|
|
@ -221,7 +221,7 @@ static int af9035_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr,
|
|||
goto err;
|
||||
}
|
||||
|
||||
request_module(board_info.type);
|
||||
request_module("%s", board_info.type);
|
||||
|
||||
/* register I2C device */
|
||||
client = i2c_new_device(adapter, &board_info);
|
||||
|
|
|
|||
|
|
@ -630,8 +630,8 @@ error:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int anysee_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr,
|
||||
void *platform_data)
|
||||
static int anysee_add_i2c_dev(struct dvb_usb_device *d, const char *type,
|
||||
u8 addr, void *platform_data)
|
||||
{
|
||||
int ret, num;
|
||||
struct anysee_state *state = d_to_priv(d);
|
||||
|
|
@ -659,7 +659,7 @@ static int anysee_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr,
|
|||
goto err;
|
||||
}
|
||||
|
||||
request_module(board_info.type);
|
||||
request_module("%s", board_info.type);
|
||||
|
||||
/* register I2C device */
|
||||
client = i2c_new_device(adapter, &board_info);
|
||||
|
|
|
|||
|
|
@ -504,7 +504,7 @@ EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
|
|||
int em28xx_audio_setup(struct em28xx *dev)
|
||||
{
|
||||
int vid1, vid2, feat, cfg;
|
||||
u32 vid;
|
||||
u32 vid = 0;
|
||||
u8 i2s_samplerates;
|
||||
|
||||
if (dev->chip_id == CHIP_ID_EM2870 ||
|
||||
|
|
|
|||
|
|
@ -712,8 +712,10 @@ static int em28xx_ir_init(struct em28xx *dev)
|
|||
em28xx_info("Registering input extension\n");
|
||||
|
||||
ir = kzalloc(sizeof(*ir), GFP_KERNEL);
|
||||
if (!ir)
|
||||
return -ENOMEM;
|
||||
rc = rc_allocate_device();
|
||||
if (!ir || !rc)
|
||||
if (!rc)
|
||||
goto error;
|
||||
|
||||
/* record handles to ourself */
|
||||
|
|
|
|||
|
|
@ -932,7 +932,7 @@ static int hackrf_set_bandwidth(struct hackrf_dev *dev)
|
|||
dev->bandwidth->val = bandwidth;
|
||||
dev->bandwidth->cur.val = bandwidth;
|
||||
|
||||
dev_dbg(dev->dev, "bandwidth selected=%d\n", bandwidth_lut[i].freq);
|
||||
dev_dbg(dev->dev, "bandwidth selected=%d\n", bandwidth);
|
||||
|
||||
u16tmp = 0;
|
||||
u16tmp |= ((bandwidth >> 0) & 0xff) << 0;
|
||||
|
|
|
|||
|
|
@ -446,6 +446,7 @@ static int usbvision_v4l2_close(struct file *file)
|
|||
if (usbvision->remove_pending) {
|
||||
printk(KERN_INFO "%s: Final disconnect\n", __func__);
|
||||
usbvision_release(usbvision);
|
||||
return 0;
|
||||
}
|
||||
mutex_unlock(&usbvision->v4l2_lock);
|
||||
|
||||
|
|
@ -1221,6 +1222,7 @@ static int usbvision_radio_close(struct file *file)
|
|||
if (usbvision->remove_pending) {
|
||||
printk(KERN_INFO "%s: Final disconnect\n", __func__);
|
||||
usbvision_release(usbvision);
|
||||
return err_code;
|
||||
}
|
||||
|
||||
mutex_unlock(&usbvision->v4l2_lock);
|
||||
|
|
|
|||
|
|
@ -318,7 +318,6 @@ static int uvc_v4l2_set_format(struct uvc_streaming *stream,
|
|||
stream->ctrl = probe;
|
||||
stream->cur_format = format;
|
||||
stream->cur_frame = frame;
|
||||
stream->frame_size = fmt->fmt.pix.sizeimage;
|
||||
|
||||
done:
|
||||
mutex_unlock(&stream->mutex);
|
||||
|
|
|
|||
|
|
@ -1143,7 +1143,7 @@ static int uvc_video_encode_data(struct uvc_streaming *stream,
|
|||
static void uvc_video_validate_buffer(const struct uvc_streaming *stream,
|
||||
struct uvc_buffer *buf)
|
||||
{
|
||||
if (stream->frame_size != buf->bytesused &&
|
||||
if (stream->ctrl.dwMaxVideoFrameSize != buf->bytesused &&
|
||||
!(stream->cur_format->flags & UVC_FMT_FLAG_COMPRESSED))
|
||||
buf->error = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -457,7 +457,6 @@ struct uvc_streaming {
|
|||
struct uvc_format *def_format;
|
||||
struct uvc_format *cur_format;
|
||||
struct uvc_frame *cur_frame;
|
||||
size_t frame_size;
|
||||
|
||||
/* Protect access to ctrl, cur_format, cur_frame and hardware video
|
||||
* probe control.
|
||||
|
|
|
|||
|
|
@ -305,6 +305,15 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q,
|
|||
/* Try to remap memory */
|
||||
size = vma->vm_end - vma->vm_start;
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
|
||||
/* the "vm_pgoff" is just used in v4l2 to find the
|
||||
* corresponding buffer data structure which is allocated
|
||||
* earlier and it does not mean the offset from the physical
|
||||
* buffer start address as usual. So set it to 0 to pass
|
||||
* the sanity check in vm_iomap_memory().
|
||||
*/
|
||||
vma->vm_pgoff = 0;
|
||||
|
||||
retval = vm_iomap_memory(vma, mem->dma_handle, size);
|
||||
if (retval) {
|
||||
dev_err(q->dev, "mmap: remap failed with error %d. ",
|
||||
|
|
|
|||
Loading…
Reference in a new issue