Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751519AbdITFPp (ORCPT ); Wed, 20 Sep 2017 01:15:45 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:45648 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751095AbdITFPn (ORCPT ); Wed, 20 Sep 2017 01:15:43 -0400 X-AuditID: b6c32a49-f79a26d000001fba-2f-59c1f97c31dc From: Satendra Singh Thakur To: mchehab@kernel.org Cc: satendra.t@samsung.com, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5] [DVB][FRONTEND] Modified the code related to FE_SET_PROPERTY ioctl Date: Wed, 20 Sep 2017 01:15:08 -0400 Message-Id: <1505884508-496-1-git-send-email-satendra.t@samsung.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <20170919063320.17cba1b6@vento.lan> X-Brightmail-Tracker: H4sIAAAAAAAAA0WSbUhTYRTHeXbv5tWaXKbl0xKTW31Q2dxdezOcKYktMhH8YCtsXebDJu1F d7fMsLA3K9FM6MVMQlylaVIstXwZU2cGFRZUZNGLSGCKRRRKalR3XqVvv/Pn/PmfczgEJhkT Sokihxu5HIyNEkXg3cGEBFn5/KBR4e1O1L3sbRTpqu91CXW3fL8Fuo7np/F03OBrOycynO9s A4afvrhcbC9KtSKmELnikcPsLCxyWPTUrjzTdpNao6BldIpOS8U7GDvSU5nZubKsIhuXRsUf YmweTsplWJZKTkt1OT1uFG91sm49tY+mlXJaoZUrlUq5Sl2wVanmWg4g6+iD96Li5qzDU28W sQowqa0C4QQkVfBJ8DjG81r44uNdURWIICRkH4Cz3nkBX/wAsMVXA/hiDsBub7Vgxf555syS XUL6Abx/eQvPswCO3bCGWMT1TDbWC0MczUVMdE/jIcbIfNhUOxcW4ihyD6xpreGiCQInN8Nn C0khWUxmwvoLI0I+Kg6+HT2HhVrCSQVsbTGHxoHkvBA29LwW8T2ZsCIQCOM5Ck4/7lxmKZyq rQzjDbUAVn9tAXzRDuDIn6nl/bfBUxcH8FACRibAu73JvKyH/qvDgJ85EtYsfl7efRO8/SW4 NBAkxfBspYSXDbBq5gPOcwacufYL5+92EsDOb17BBbCh4X9CEwBtYB0qZu0WxKqLaQcqlbOM nfU4LHKz0+4DS1+VuPMhaBjNHgIkAajV4tbUQaNEyBxiy+xDABIYFS0em+UkcSFTdgS5nCaX x4bYIaDmjlmHSdeYndyPOtwmWpWiUGk0WlqhSFFRMeKRHo9RQloYNzqIUDFyrfgERLi0AgzL hr/HxsStT8r2z/VlTOaLuyY2LT79VJXQ8YMsndXu7r/j33d9YfrLTdfGdwZP3pWsvPb0CHe+ wesPptljp+OeNRWeGM1ZRQ0aCwpKUqRfm03HvJENgai/ddUDj4o0Aa176NK4VNJfkikJHt1R jnLGv28ke0z79dfrbH9+v3pC4ayVoRMxF8v8A8QRHuNrAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkluLIzCtJLcpLzFFi42LZdlhJTrf658FIgx1TFSwu75rDZtGzYSur xbJNf5gs1p5vZXFg8di0qpPNo2/LKkaPz5vkApijuGxSUnMyy1KL9O0SuDLObb/DVrDIreLl 9d/MDYzPzbsYOTkkBEwknrxpZ+5i5OIQEtjNKHHtRhMzREJKYtmbbWwQtrDEyn/P2SGKPjNK 7DhwmwUkwQbU/XzODFYQW0RATOLRtldgcWaBSIkTe/ezg9jCAmES2269BBrEwcEioCpx5pc2 SJhXwEVixoRjrBDz5SRunutkBinhFDCQWLE8GSQsJKAvcfnLe8YJjHwLGBlWMUqmFhTnpucW GxYY5qWW6xUn5haX5qXrJefnbmIEB5CW5g7Gy0viDzEKcDAq8fAGWB2MFGJNLCuuzD3EKMHB rCTCe+MrUIg3JbGyKrUoP76oNCe1+BCjNAeLkjhvWu+MSCGB9MSS1OzU1ILUIpgsEwenVAMj A/t9R/Y3BwX4D1/Kqyt/s1zH3iVolkdcodd+e/Pkx3cizT9ah/ts1DBJcdl7+pTU5rBDhR3n 5ItX9WZ11lxz/vV6/q3k+Ut3+WR1bV0U/G1aSH3JkifJTzhihGO+vF7myLisUnHquiIulstX 5loGTG3zLfp+J+yy4GPfYxOVt1jVZv7b5jVTiaU4I9FQi7moOBEAixS0lBwCAAA= X-CMS-MailID: 20170920051539epcas5p2cd7f0cca8120dcb87c576f3bd8778aa2 X-Msg-Generator: CA X-Sender-IP: 182.195.40.13 X-Local-Sender: =?UTF-8?B?U2F0ZW5kcmEgU2luZ2ggVGhha3VyG1NSSS1EZWxoaS1TeXN0?= =?UTF-8?B?ZW0gUy9XIFRlYW0b7IK87ISx7KCE7J6QG0NoaWVmIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?U2F0ZW5kcmEgU2luZ2ggVGhha3VyG1NSSS1EZWxoaS1TeXN0?= =?UTF-8?B?ZW0gUy9XIFRlYW0bU2Ftc3VuZyBFbGVjdHJvbmljcxtDaGllZiBFbmdpbmVl?= =?UTF-8?B?cg==?= X-Sender-Code: =?UTF-8?B?QzEwG1NXQUhRG0MxMElEMDJJRDAyODExMg==?= Content-Type: text/plain; charset="utf-8" X-MTR: 20170920051539epcas5p2cd7f0cca8120dcb87c576f3bd8778aa2 CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20170920051539epcas5p2cd7f0cca8120dcb87c576f3bd8778aa2 X-RootMTR: 20170920051539epcas5p2cd7f0cca8120dcb87c576f3bd8778aa2 References: <20170919063320.17cba1b6@vento.lan> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8693 Lines: 299 -Since all the properties in the func dtv_property_process_set are 4 bytes, We have added 2 new arguments u32 cmd and u32 data; in place of older argument struct dtv_property *tvp. -We have removed property validation in function dtv_property_process_set because most of the frontend drivers in linux source are not using the method ops.set_property. -In place of dtv_property_dump, we have added own logic to dump cmd and data of the incoming property -We have also re-named dtv_property_dump to dtv_get_property_dump. -We have modified logs in this func to be suitable only for getting properties. Signed-off-by: Satendra Singh Thakur --- drivers/media/dvb-core/dvb_frontend.c | 135 ++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 62 deletions(-) diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c index 2fcba16..013476e 100644 --- a/drivers/media/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb-core/dvb_frontend.c @@ -1092,22 +1092,19 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = { _DTV_CMD(DTV_STAT_TOTAL_BLOCK_COUNT, 0, 0), }; -static void dtv_property_dump(struct dvb_frontend *fe, - bool is_set, +static void dtv_get_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp) { int i; if (tvp->cmd <= 0 || tvp->cmd > DTV_MAX_COMMAND) { - dev_warn(fe->dvb->device, "%s: %s tvp.cmd = 0x%08x undefined\n", - __func__, - is_set ? "SET" : "GET", + dev_warn(fe->dvb->device, "%s: GET tvp.cmd = 0x%08x undefined\n" + , __func__, tvp->cmd); return; } - dev_dbg(fe->dvb->device, "%s: %s tvp.cmd = 0x%08x (%s)\n", __func__, - is_set ? "SET" : "GET", + dev_dbg(fe->dvb->device, "%s: GET tvp.cmd = 0x%08x (%s)\n", __func__, tvp->cmd, dtv_cmds[tvp->cmd].name); @@ -1526,7 +1523,7 @@ static int dtv_property_process_get(struct dvb_frontend *fe, return r; } - dtv_property_dump(fe, false, tvp); + dtv_get_property_dump(fe, tvp); return 0; } @@ -1749,23 +1746,35 @@ static int dvbv3_set_delivery_system(struct dvb_frontend *fe) return emulate_delivery_system(fe, delsys); } +/** + * dtv_property_process_set - Sets a single DTV property + * @fe: Pointer to &struct dvb_frontend + * @file: Pointer to &struct file + * @cmd: Digital TV command + * @data: An unsigned 32-bits number + * + * This routine assigns the property + * value to the corresponding member of + * &struct dtv_frontend_properties + * + * Returns: + * Zero on success, negative errno on failure. + */ static int dtv_property_process_set(struct dvb_frontend *fe, - struct dtv_property *tvp, - struct file *file) + struct file *file, + u32 cmd, u32 data) { int r = 0; struct dtv_frontend_properties *c = &fe->dtv_property_cache; - - /* Allow the frontend to validate incoming properties */ - if (fe->ops.set_property) { - r = fe->ops.set_property(fe, tvp); - if (r < 0) - return r; - } - - dtv_property_dump(fe, true, tvp); - - switch(tvp->cmd) { + /** Dump DTV command name and value*/ + if (!cmd || cmd > DTV_MAX_COMMAND) + dev_warn(fe->dvb->device, "%s: SET cmd 0x%08x undefined\n", + __func__, cmd); + else + dev_dbg(fe->dvb->device, + "%s: SET cmd 0x%08x (%s) to 0x%08x\n", + __func__, cmd, dtv_cmds[cmd].name, data); + switch (cmd) { case DTV_CLEAR: /* * Reset a cache of data specific to the frontend here. This does @@ -1778,140 +1787,140 @@ static int dtv_property_process_set(struct dvb_frontend *fe, * tunerequest so we can pass validation in the FE_SET_FRONTEND * ioctl. */ - c->state = tvp->cmd; + c->state = cmd; dev_dbg(fe->dvb->device, "%s: Finalised property cache\n", __func__); r = dtv_set_frontend(fe); break; case DTV_FREQUENCY: - c->frequency = tvp->u.data; + c->frequency = data; break; case DTV_MODULATION: - c->modulation = tvp->u.data; + c->modulation = data; break; case DTV_BANDWIDTH_HZ: - c->bandwidth_hz = tvp->u.data; + c->bandwidth_hz = data; break; case DTV_INVERSION: - c->inversion = tvp->u.data; + c->inversion = data; break; case DTV_SYMBOL_RATE: - c->symbol_rate = tvp->u.data; + c->symbol_rate = data; break; case DTV_INNER_FEC: - c->fec_inner = tvp->u.data; + c->fec_inner = data; break; case DTV_PILOT: - c->pilot = tvp->u.data; + c->pilot = data; break; case DTV_ROLLOFF: - c->rolloff = tvp->u.data; + c->rolloff = data; break; case DTV_DELIVERY_SYSTEM: - r = dvbv5_set_delivery_system(fe, tvp->u.data); + r = dvbv5_set_delivery_system(fe, data); break; case DTV_VOLTAGE: - c->voltage = tvp->u.data; + c->voltage = data; r = dvb_frontend_ioctl_legacy(file, FE_SET_VOLTAGE, (void *)c->voltage); break; case DTV_TONE: - c->sectone = tvp->u.data; + c->sectone = data; r = dvb_frontend_ioctl_legacy(file, FE_SET_TONE, (void *)c->sectone); break; case DTV_CODE_RATE_HP: - c->code_rate_HP = tvp->u.data; + c->code_rate_HP = data; break; case DTV_CODE_RATE_LP: - c->code_rate_LP = tvp->u.data; + c->code_rate_LP = data; break; case DTV_GUARD_INTERVAL: - c->guard_interval = tvp->u.data; + c->guard_interval = data; break; case DTV_TRANSMISSION_MODE: - c->transmission_mode = tvp->u.data; + c->transmission_mode = data; break; case DTV_HIERARCHY: - c->hierarchy = tvp->u.data; + c->hierarchy = data; break; case DTV_INTERLEAVING: - c->interleaving = tvp->u.data; + c->interleaving = data; break; /* ISDB-T Support here */ case DTV_ISDBT_PARTIAL_RECEPTION: - c->isdbt_partial_reception = tvp->u.data; + c->isdbt_partial_reception = data; break; case DTV_ISDBT_SOUND_BROADCASTING: - c->isdbt_sb_mode = tvp->u.data; + c->isdbt_sb_mode = data; break; case DTV_ISDBT_SB_SUBCHANNEL_ID: - c->isdbt_sb_subchannel = tvp->u.data; + c->isdbt_sb_subchannel = data; break; case DTV_ISDBT_SB_SEGMENT_IDX: - c->isdbt_sb_segment_idx = tvp->u.data; + c->isdbt_sb_segment_idx = data; break; case DTV_ISDBT_SB_SEGMENT_COUNT: - c->isdbt_sb_segment_count = tvp->u.data; + c->isdbt_sb_segment_count = data; break; case DTV_ISDBT_LAYER_ENABLED: - c->isdbt_layer_enabled = tvp->u.data; + c->isdbt_layer_enabled = data; break; case DTV_ISDBT_LAYERA_FEC: - c->layer[0].fec = tvp->u.data; + c->layer[0].fec = data; break; case DTV_ISDBT_LAYERA_MODULATION: - c->layer[0].modulation = tvp->u.data; + c->layer[0].modulation = data; break; case DTV_ISDBT_LAYERA_SEGMENT_COUNT: - c->layer[0].segment_count = tvp->u.data; + c->layer[0].segment_count = data; break; case DTV_ISDBT_LAYERA_TIME_INTERLEAVING: - c->layer[0].interleaving = tvp->u.data; + c->layer[0].interleaving = data; break; case DTV_ISDBT_LAYERB_FEC: - c->layer[1].fec = tvp->u.data; + c->layer[1].fec = data; break; case DTV_ISDBT_LAYERB_MODULATION: - c->layer[1].modulation = tvp->u.data; + c->layer[1].modulation = data; break; case DTV_ISDBT_LAYERB_SEGMENT_COUNT: - c->layer[1].segment_count = tvp->u.data; + c->layer[1].segment_count = data; break; case DTV_ISDBT_LAYERB_TIME_INTERLEAVING: - c->layer[1].interleaving = tvp->u.data; + c->layer[1].interleaving = data; break; case DTV_ISDBT_LAYERC_FEC: - c->layer[2].fec = tvp->u.data; + c->layer[2].fec = data; break; case DTV_ISDBT_LAYERC_MODULATION: - c->layer[2].modulation = tvp->u.data; + c->layer[2].modulation = data; break; case DTV_ISDBT_LAYERC_SEGMENT_COUNT: - c->layer[2].segment_count = tvp->u.data; + c->layer[2].segment_count = data; break; case DTV_ISDBT_LAYERC_TIME_INTERLEAVING: - c->layer[2].interleaving = tvp->u.data; + c->layer[2].interleaving = data; break; /* Multistream support */ case DTV_STREAM_ID: case DTV_DVBT2_PLP_ID_LEGACY: - c->stream_id = tvp->u.data; + c->stream_id = data; break; /* ATSC-MH */ case DTV_ATSCMH_PARADE_ID: - fe->dtv_property_cache.atscmh_parade_id = tvp->u.data; + fe->dtv_property_cache.atscmh_parade_id = data; break; case DTV_ATSCMH_RS_FRAME_ENSEMBLE: - fe->dtv_property_cache.atscmh_rs_frame_ensemble = tvp->u.data; + fe->dtv_property_cache.atscmh_rs_frame_ensemble = data; break; case DTV_LNA: - c->lna = tvp->u.data; + c->lna = data; if (fe->ops.set_lna) r = fe->ops.set_lna(fe); if (r < 0) @@ -1990,7 +1999,9 @@ static int dvb_frontend_ioctl_properties(struct file *file, return PTR_ERR(tvp); for (i = 0; i < tvps->num; i++) { - err = dtv_property_process_set(fe, tvp + i, file); + err = dtv_property_process_set(fe, file, + (tvp + i)->cmd, + (tvp + i)->u.data); if (err < 0) goto out; (tvp + i)->result = err; -- 2.7.4