Re: [PATCH v2 1/2] si2168: Add spectrum inversion property

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2018-01-17 16:02, Antti Palosaari wrote:
>
>
> On 01/17/2018 11:52 PM, Brad Love wrote:
>> Some tuners produce inverted spectrum, but the si2168 is not
>> currently set up to accept it. This adds an optional parameter
>> to set the frontend up to receive inverted spectrum.
>>
>> Parameter is optional and only boards who enable inversion
>> will utilize this.
>>
>> Signed-off-by: Brad Love <brad@xxxxxxxxxxxxxxxx>
>> ---
>> Changes since v1:
>> - Embarassing build failure due to missing declaration.
>>
>>   drivers/media/dvb-frontends/si2168.c | 3 +++
>>   drivers/media/dvb-frontends/si2168.h | 3 +++
>>   2 files changed, 6 insertions(+)
>>
>> diff --git a/drivers/media/dvb-frontends/si2168.c
>> b/drivers/media/dvb-frontends/si2168.c
>> index c041e79..048b815 100644
>> --- a/drivers/media/dvb-frontends/si2168.c
>> +++ b/drivers/media/dvb-frontends/si2168.c
>> @@ -213,6 +213,7 @@ static int si2168_set_frontend(struct
>> dvb_frontend *fe)
>>       struct i2c_client *client = fe->demodulator_priv;
>>       struct si2168_dev *dev = i2c_get_clientdata(client);
>>       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
>> +    struct si2168_config *config = client->dev.platform_data;
>
> hmmm, are you sure platform data pointer points is const? I usually
> tend to store all config information to device state. Then there is no
> need to care if pointer is valid or not anymore.
>
> And inversion happens when those wires are cross-connected

It just dawned on me that the platform_data is stack allocated and
therefore not safe to access outside of probe. I will fix this momentarily.

I was informed by one of our hardware guys that the two models in patch
2/2 are inverted spectrum, so I guess they have wires cross-connected. I
can verify this again to be sure.



>
>>       int ret;
>>       struct si2168_cmd cmd;
>>       u8 bandwidth, delivery_system;
>> @@ -339,6 +340,8 @@ static int si2168_set_frontend(struct
>> dvb_frontend *fe)
>>         memcpy(cmd.args, "\x14\x00\x0a\x10\x00\x00", 6);
>>       cmd.args[4] = delivery_system | bandwidth;
>> +    if (config->spectral_inversion)
>> +        cmd.args[5] |= 1;
>>       cmd.wlen = 6;
>>       cmd.rlen = 4;
>>       ret = si2168_cmd_execute(client, &cmd);
>> diff --git a/drivers/media/dvb-frontends/si2168.h
>> b/drivers/media/dvb-frontends/si2168.h
>> index f48f0fb..d519edd 100644
>> --- a/drivers/media/dvb-frontends/si2168.h
>> +++ b/drivers/media/dvb-frontends/si2168.h
>> @@ -46,6 +46,9 @@ struct si2168_config {
>>         /* TS clock gapped */
>>       bool ts_clock_gapped;
>> +
>> +    /* Inverted spectrum */
>> +    bool spectral_inversion;
>>   };
>>     #endif
>>
>





[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux