media fixes for v5.10-rc8
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+QmuaPwR3wnBdVwACF8+vY7k4RUFAl/SAkAACgkQCF8+vY7k 4RXd2A/7B2hPds737XVei8/b/Av1HmE9AMsfy77iXP7gm3BBBBamhFlCohM6e8bG 3s2YmOsJ/1tCN4SY6yKNHBDJciYWKC6ql1GLUmlgW+uvJMMRN9SsrmRRs9Ws4q6B N2J1eD399SYpnPwcvtbsoaS6A8LQXFHQZVnoqiPRamyUEMQYvXSGdeDgw1032EL5 +74ZMbJQgs6ri3mCkX9FIp3z9foZaSD5bmjrFJKXqllkFBLgpaIxv8C6KjTwCvT/ sgvj1ihnjO4b+atC4QoYi4gyWBEU31dMxzL32riRin8gafA42IAvaUaoS+vpBY6N yDhS8HH6vpOXVkPtzfrBXzz/7ZiZoBFJWBMdzoeHX41Nrd2D6LKWsUp9ZqC+uBmF zb7NC20IZr8XwO8KGNSmsZ4jzw7wDbA5LstSZVQSv5WbOtnrGMQ0q2NWgMn7SziS pk3nbZ4JtFp4SkxP/wNYyN+KdWoHRet67Fj+jOjJghw8KlnUmqoAv2+CuHYSlDEQ e+VW63EVGZ/MNBzTdGWZMnw8meZ0QR2LXq61sIvbDoxIdVWEK2XA4cmMRBm2pZ8P 9mqITdmgeH8xy5CsEvr+hcRl/pmjqGZ9jo9u3kKshbyL1vnb8jmWo+TaEopeBE4R LHzk+/FLAKUTuzK+lMc0wELGHVjHUa8p+TPr7yQvmSa+dIfGZCM= =D71n -----END PGP SIGNATURE----- Merge tag 'media/v5.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media Pull media fixes from Mauro Carvalho Chehab: "A couple of fixes: - videobuf2: fix a DMABUF bug, preventing it to properly handle cache sync/flush - vidtv: an usage after free and a few sparse/smatch warning fixes - pulse8-cec: a duplicate free and a bug related to new firmware usage - mtk-cir: fix a regression on a clock setting" * tag 'media/v5.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: media: vidtv: fix some warnings media: vidtv: fix kernel-doc markups media: [next] media: vidtv: fix a read from an object after it has been freed media: vb2: set cache sync hints when init buffers media: pulse8-cec: add support for FW v10 and up media: pulse8-cec: fix duplicate free at disconnect or probe error media: mtk-cir: fix calculation of chk period
This commit is contained in:
commit
40201575b7
@ -88,13 +88,15 @@ enum pulse8_msgcodes {
|
||||
MSGCODE_SET_PHYSICAL_ADDRESS, /* 0x20 */
|
||||
MSGCODE_GET_DEVICE_TYPE,
|
||||
MSGCODE_SET_DEVICE_TYPE,
|
||||
MSGCODE_GET_HDMI_VERSION,
|
||||
MSGCODE_GET_HDMI_VERSION, /* Removed in FW >= 10 */
|
||||
MSGCODE_SET_HDMI_VERSION,
|
||||
MSGCODE_GET_OSD_NAME,
|
||||
MSGCODE_SET_OSD_NAME,
|
||||
MSGCODE_WRITE_EEPROM,
|
||||
MSGCODE_GET_ADAPTER_TYPE, /* 0x28 */
|
||||
MSGCODE_SET_ACTIVE_SOURCE,
|
||||
MSGCODE_GET_AUTO_POWER_ON, /* New for FW >= 10 */
|
||||
MSGCODE_SET_AUTO_POWER_ON,
|
||||
|
||||
MSGCODE_FRAME_EOM = 0x80,
|
||||
MSGCODE_FRAME_ACK = 0x40,
|
||||
@ -143,6 +145,8 @@ static const char * const pulse8_msgnames[] = {
|
||||
"WRITE_EEPROM",
|
||||
"GET_ADAPTER_TYPE",
|
||||
"SET_ACTIVE_SOURCE",
|
||||
"GET_AUTO_POWER_ON",
|
||||
"SET_AUTO_POWER_ON",
|
||||
};
|
||||
|
||||
static const char *pulse8_msgname(u8 cmd)
|
||||
@ -579,12 +583,14 @@ static int pulse8_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
|
||||
if (err)
|
||||
goto unlock;
|
||||
|
||||
cmd[0] = MSGCODE_SET_HDMI_VERSION;
|
||||
cmd[1] = adap->log_addrs.cec_version;
|
||||
err = pulse8_send_and_wait(pulse8, cmd, 2,
|
||||
MSGCODE_COMMAND_ACCEPTED, 0);
|
||||
if (err)
|
||||
goto unlock;
|
||||
if (pulse8->vers < 10) {
|
||||
cmd[0] = MSGCODE_SET_HDMI_VERSION;
|
||||
cmd[1] = adap->log_addrs.cec_version;
|
||||
err = pulse8_send_and_wait(pulse8, cmd, 2,
|
||||
MSGCODE_COMMAND_ACCEPTED, 0);
|
||||
if (err)
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
if (adap->log_addrs.osd_name[0]) {
|
||||
size_t osd_len = strlen(adap->log_addrs.osd_name);
|
||||
@ -650,7 +656,6 @@ static void pulse8_disconnect(struct serio *serio)
|
||||
struct pulse8 *pulse8 = serio_get_drvdata(serio);
|
||||
|
||||
cec_unregister_adapter(pulse8->adap);
|
||||
pulse8->serio = NULL;
|
||||
serio_set_drvdata(serio, NULL);
|
||||
serio_close(serio);
|
||||
}
|
||||
@ -692,6 +697,14 @@ static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio,
|
||||
dev_dbg(pulse8->dev, "Autonomous mode: %s",
|
||||
data[0] ? "on" : "off");
|
||||
|
||||
if (pulse8->vers >= 10) {
|
||||
cmd[0] = MSGCODE_GET_AUTO_POWER_ON;
|
||||
err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
|
||||
if (!err)
|
||||
dev_dbg(pulse8->dev, "Auto Power On: %s",
|
||||
data[0] ? "on" : "off");
|
||||
}
|
||||
|
||||
cmd[0] = MSGCODE_GET_DEVICE_TYPE;
|
||||
err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
|
||||
if (err)
|
||||
@ -753,12 +766,15 @@ static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio,
|
||||
dev_dbg(pulse8->dev, "Physical address: %x.%x.%x.%x\n",
|
||||
cec_phys_addr_exp(*pa));
|
||||
|
||||
cmd[0] = MSGCODE_GET_HDMI_VERSION;
|
||||
err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
|
||||
if (err)
|
||||
return err;
|
||||
log_addrs->cec_version = data[0];
|
||||
dev_dbg(pulse8->dev, "CEC version: %d\n", log_addrs->cec_version);
|
||||
log_addrs->cec_version = CEC_OP_CEC_VERSION_1_4;
|
||||
if (pulse8->vers < 10) {
|
||||
cmd[0] = MSGCODE_GET_HDMI_VERSION;
|
||||
err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
|
||||
if (err)
|
||||
return err;
|
||||
log_addrs->cec_version = data[0];
|
||||
dev_dbg(pulse8->dev, "CEC version: %d\n", log_addrs->cec_version);
|
||||
}
|
||||
|
||||
cmd[0] = MSGCODE_GET_OSD_NAME;
|
||||
err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 0);
|
||||
@ -830,8 +846,10 @@ static int pulse8_connect(struct serio *serio, struct serio_driver *drv)
|
||||
pulse8->adap = cec_allocate_adapter(&pulse8_cec_adap_ops, pulse8,
|
||||
dev_name(&serio->dev), caps, 1);
|
||||
err = PTR_ERR_OR_ZERO(pulse8->adap);
|
||||
if (err < 0)
|
||||
goto free_device;
|
||||
if (err < 0) {
|
||||
kfree(pulse8);
|
||||
return err;
|
||||
}
|
||||
|
||||
pulse8->dev = &serio->dev;
|
||||
serio_set_drvdata(serio, pulse8);
|
||||
@ -874,8 +892,6 @@ close_serio:
|
||||
serio_close(serio);
|
||||
delete_adap:
|
||||
cec_delete_adapter(pulse8->adap);
|
||||
free_device:
|
||||
kfree(pulse8);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -414,6 +414,17 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory,
|
||||
vb->index = q->num_buffers + buffer;
|
||||
vb->type = q->type;
|
||||
vb->memory = memory;
|
||||
/*
|
||||
* We need to set these flags here so that the videobuf2 core
|
||||
* will call ->prepare()/->finish() cache sync/flush on vb2
|
||||
* buffers when appropriate. However, we can avoid explicit
|
||||
* ->prepare() and ->finish() cache sync for DMABUF buffers,
|
||||
* because DMA exporter takes care of it.
|
||||
*/
|
||||
if (q->memory != VB2_MEMORY_DMABUF) {
|
||||
vb->need_cache_sync_on_prepare = 1;
|
||||
vb->need_cache_sync_on_finish = 1;
|
||||
}
|
||||
for (plane = 0; plane < num_planes; ++plane) {
|
||||
vb->planes[plane].length = plane_sizes[plane];
|
||||
vb->planes[plane].min_length = plane_sizes[plane];
|
||||
|
@ -151,15 +151,12 @@ static inline u32 mtk_chk_period(struct mtk_ir *ir)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
/* Period of raw software sampling in ns */
|
||||
val = DIV_ROUND_CLOSEST(1000000000ul,
|
||||
clk_get_rate(ir->bus) / ir->data->div);
|
||||
|
||||
/*
|
||||
* Period for software decoder used in the
|
||||
* unit of raw software sampling
|
||||
*/
|
||||
val = DIV_ROUND_CLOSEST(MTK_IR_SAMPLE, val);
|
||||
val = DIV_ROUND_CLOSEST(clk_get_rate(ir->bus),
|
||||
USEC_PER_SEC * ir->data->div / MTK_IR_SAMPLE);
|
||||
|
||||
dev_dbg(ir->dev, "@pwm clk = \t%lu\n",
|
||||
clk_get_rate(ir->bus) / ir->data->div);
|
||||
@ -412,7 +409,7 @@ static int mtk_ir_probe(struct platform_device *pdev)
|
||||
mtk_irq_enable(ir, MTK_IRINT_EN);
|
||||
|
||||
dev_info(dev, "Initialized MT7623 IR driver, sample period = %dus\n",
|
||||
DIV_ROUND_CLOSEST(MTK_IR_SAMPLE, 1000));
|
||||
MTK_IR_SAMPLE);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -504,11 +504,11 @@ void vidtv_channel_si_destroy(struct vidtv_mux *m)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
vidtv_psi_pat_table_destroy(m->si.pat);
|
||||
|
||||
for (i = 0; i < m->si.pat->num_pmt; ++i)
|
||||
vidtv_psi_pmt_table_destroy(m->si.pmt_secs[i]);
|
||||
|
||||
vidtv_psi_pat_table_destroy(m->si.pat);
|
||||
|
||||
kfree(m->si.pmt_secs);
|
||||
vidtv_psi_sdt_table_destroy(m->si.sdt);
|
||||
vidtv_psi_nit_table_destroy(m->si.nit);
|
||||
|
@ -420,7 +420,7 @@ void vidtv_psi_desc_assign(struct vidtv_psi_desc **to,
|
||||
struct vidtv_psi_desc *desc);
|
||||
|
||||
/**
|
||||
* vidtv_psi_pmt_desc_assign - Assigns a descriptor loop at some point in a PMT section.
|
||||
* vidtv_pmt_desc_assign - Assigns a descriptor loop at some point in a PMT section.
|
||||
* @pmt: The PMT section that will contain the descriptor loop
|
||||
* @to: Where in the PMT to assign this descriptor loop to
|
||||
* @desc: The descriptor loop that will be assigned.
|
||||
@ -434,7 +434,7 @@ void vidtv_pmt_desc_assign(struct vidtv_psi_table_pmt *pmt,
|
||||
struct vidtv_psi_desc *desc);
|
||||
|
||||
/**
|
||||
* vidtv_psi_sdt_desc_assign - Assigns a descriptor loop at some point in a SDT.
|
||||
* vidtv_sdt_desc_assign - Assigns a descriptor loop at some point in a SDT.
|
||||
* @sdt: The SDT that will contain the descriptor loop
|
||||
* @to: Where in the PMT to assign this descriptor loop to
|
||||
* @desc: The descriptor loop that will be assigned.
|
||||
@ -474,7 +474,7 @@ void vidtv_psi_pmt_stream_assign(struct vidtv_psi_table_pmt *pmt,
|
||||
struct vidtv_psi_desc *vidtv_psi_desc_clone(struct vidtv_psi_desc *desc);
|
||||
|
||||
/**
|
||||
* vidtv_psi_create_sec_for_each_pat_entry - Create a PMT section for each
|
||||
* vidtv_psi_pmt_create_sec_for_each_pat_entry - Create a PMT section for each
|
||||
* program found in the PAT
|
||||
* @pat: The PAT to look for programs.
|
||||
* @pcr_pid: packet ID for the PCR to be used for the program described in this
|
||||
@ -743,7 +743,7 @@ struct vidtv_psi_table_eit {
|
||||
struct vidtv_psi_table_eit
|
||||
*vidtv_psi_eit_table_init(u16 network_id,
|
||||
u16 transport_stream_id,
|
||||
u16 service_id);
|
||||
__be16 service_id);
|
||||
|
||||
/**
|
||||
* struct vidtv_psi_eit_write_args - Arguments for writing an EIT section
|
||||
|
@ -467,8 +467,10 @@ struct vidtv_encoder
|
||||
e->is_video_encoder = false;
|
||||
|
||||
ctx = kzalloc(priv_sz, GFP_KERNEL);
|
||||
if (!ctx)
|
||||
if (!ctx) {
|
||||
kfree(e);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
e->ctx = ctx;
|
||||
ctx->last_duration = 0;
|
||||
|
@ -44,7 +44,7 @@ struct vidtv_mpeg_ts {
|
||||
u8 adaptation_field:1;
|
||||
u8 scrambling:2;
|
||||
} __packed;
|
||||
struct vidtv_mpeg_ts_adaption adaption[];
|
||||
struct vidtv_mpeg_ts_adaption *adaption;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user