[2/2] mn88472: implement firmware parity check
Commit Message
Signed-off-by: Benjamin Larsson <benjamin@southpole.se>
---
drivers/staging/media/mn88472/mn88472.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
Comments
Reviewed-by: Antti Palosaari <crope@iki.fi>
PS. something to say about logging levels... but as it is staging
driver, criteria for patches is not so high yet.
regards
Antti
On 12/08/2014 10:31 PM, Benjamin Larsson wrote:
> Signed-off-by: Benjamin Larsson <benjamin@southpole.se>
> ---
> drivers/staging/media/mn88472/mn88472.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/drivers/staging/media/mn88472/mn88472.c b/drivers/staging/media/mn88472/mn88472.c
> index df7dbe9..1df85a7 100644
> --- a/drivers/staging/media/mn88472/mn88472.c
> +++ b/drivers/staging/media/mn88472/mn88472.c
> @@ -294,6 +294,7 @@ static int mn88472_init(struct dvb_frontend *fe)
> int ret, len, remaining;
> const struct firmware *fw = NULL;
> u8 *fw_file = MN88472_FIRMWARE;
> + unsigned int csum;
>
> dev_dbg(&client->dev, "\n");
>
> @@ -346,6 +347,20 @@ static int mn88472_init(struct dvb_frontend *fe)
> }
> }
>
> + /* parity check of firmware */
> + ret = regmap_read(dev->regmap[0], 0xf8, &csum);
> + if (ret) {
> + dev_err(&client->dev,
> + "parity reg read failed=%d\n", ret);
> + goto err;
> + }
> + if (csum & 0x10) {
> + dev_err(&client->dev,
> + "firmware parity check failed=0x%x\n", csum);
> + goto err;
> + }
> + dev_err(&client->dev, "firmware parity check succeeded=0x%x\n", csum);
> +
> ret = regmap_write(dev->regmap[0], 0xf5, 0x00);
> if (ret)
> goto err;
>
@@ -294,6 +294,7 @@ static int mn88472_init(struct dvb_frontend *fe)
int ret, len, remaining;
const struct firmware *fw = NULL;
u8 *fw_file = MN88472_FIRMWARE;
+ unsigned int csum;
dev_dbg(&client->dev, "\n");
@@ -346,6 +347,20 @@ static int mn88472_init(struct dvb_frontend *fe)
}
}
+ /* parity check of firmware */
+ ret = regmap_read(dev->regmap[0], 0xf8, &csum);
+ if (ret) {
+ dev_err(&client->dev,
+ "parity reg read failed=%d\n", ret);
+ goto err;
+ }
+ if (csum & 0x10) {
+ dev_err(&client->dev,
+ "firmware parity check failed=0x%x\n", csum);
+ goto err;
+ }
+ dev_err(&client->dev, "firmware parity check succeeded=0x%x\n", csum);
+
ret = regmap_write(dev->regmap[0], 0xf5, 0x00);
if (ret)
goto err;