Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media fixes from Mauro Carvalho Chehab: "For: - some regression fixes at the Remote Controller core and imon driver - a build fix for certain randconfigs with ir-hix5hd2 - don't feed power to satellite system at ds3000 driver init It also contains some fixes for drivers added for Kernel 3.18: - some fixes at the new ISDB-S driver, and the corresponding bits to fix some descriptors for this Japanese TV standard at the DVB core - two warning cleanups for sp2 driver if PM is disabled - change the default mode for the new vivid driver" * git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: [media] sp2: sp2_init() can be static [media] dvb:tc90522: fix always-false expression [media] dvb-core: set default properties of ISDB-S [media] dvb:tc90522: fix stats report [media] vivid: default to single planar device instances [media] imon: fix other RC type protocol support [media] ir-hix5hd2 fix build warning [media] ds3000: fix LNB supply voltage on Tevii S480 on initialization [media] rc5-decoder: BZ#85721: Fix RC5-SZ decoding [media] rc-core: fix protocol_change regression in ir_raw_event_register
This commit is contained in:
commit
ae04e1ca80
|
@ -221,12 +221,11 @@ ccs_out_mode: specify the allowed video output crop/compose/scaling combination
|
|||
key, not quality.
|
||||
|
||||
multiplanar: select whether each device instance supports multi-planar formats,
|
||||
and thus the V4L2 multi-planar API. By default the first device instance
|
||||
is single-planar, the second multi-planar, and it keeps alternating.
|
||||
and thus the V4L2 multi-planar API. By default device instances are
|
||||
single-planar.
|
||||
|
||||
This module option can override that for each instance. Values are:
|
||||
|
||||
0: use alternating single and multi-planar devices.
|
||||
1: this is a single-planar instance.
|
||||
2: this is a multi-planar instance.
|
||||
|
||||
|
@ -975,9 +974,8 @@ is set, then the alpha component is only used for the color red and set to
|
|||
0 otherwise.
|
||||
|
||||
The driver has to be configured to support the multiplanar formats. By default
|
||||
the first driver instance is single-planar, the second is multi-planar, and it
|
||||
keeps alternating. This can be changed by setting the multiplanar module option,
|
||||
see section 1 for more details on that option.
|
||||
the driver instances are single-planar. This can be changed by setting the
|
||||
multiplanar module option, see section 1 for more details on that option.
|
||||
|
||||
If the driver instance is using the multiplanar formats/API, then the first
|
||||
single planar format (YUYV) and the multiplanar NV16M and NV61M formats the
|
||||
|
@ -1021,7 +1019,7 @@ the output overlay for the video output, turn on video looping and capture
|
|||
to see the blended framebuffer overlay that's being written to by the second
|
||||
instance. This setup would require the following commands:
|
||||
|
||||
$ sudo modprobe vivid n_devs=2 node_types=0x10101,0x1 multiplanar=1,1
|
||||
$ sudo modprobe vivid n_devs=2 node_types=0x10101,0x1
|
||||
$ v4l2-ctl -d1 --find-fb
|
||||
/dev/fb1 is the framebuffer associated with base address 0x12800000
|
||||
$ sudo v4l2-ctl -d2 --set-fbuf fb=1
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ");
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue