[PATCH 3/3] i2c: rcar: Fix Wvoid-pointer-to-enum-cast warning
Krzysztof Kozlowski
krzysztof.kozlowski at oss.qualcomm.com
Thu Nov 27 03:48:01 PST 2025
On 27/11/2025 12:42, Krzysztof Kozlowski wrote:
>>
>> =
>>> --- a/drivers/i2c/busses/i2c-rcar.c
>>> +++ b/drivers/i2c/busses/i2c-rcar.c
>>> @@ -1141,7 +1141,7 @@ static int rcar_i2c_probe(struct platform_device *pdev)
>>> if (IS_ERR(priv->io))
>>> return PTR_ERR(priv->io);
>>>
>>> - priv->devtype = (enum rcar_i2c_type)of_device_get_match_data(dev);
>>> + priv->devtype = (kernel_ulong_t)of_device_get_match_data(dev);
>>
>> Any specific reason you picked "kernel_ulong_t" instead of "unsigned long"?
>> The former seems to be the least common option.
>
> As I wrote in the first patch, because to my knowledge it is the
> preferred form for holding driver data which are in general pointers. We
> do not store pointers as unsigned long. It is also already used for the
> driver data types - see include/linux/mod_devicetable.h.
... and in case it is still not obvious: I do not cast here to final
type, because that cast is the reason for the warning.
I cast to an intermediary type to help compiler suppressing the warning
- to integer representing the pointer. Unsigned long is not representing
pointers in the kernel. Integer type representing the pointer is
kernel_ulong_t, I think.
Once you have integer type representing the pointer, you do not need
further casts to enum.
>
Best regards,
Krzysztof
More information about the linux-arm-kernel
mailing list