Re: [PATCH v3 2/2] mfd: Add Spreadtrum SC27xx series PMICs driver

From: Baolin Wang
Date: Tue Oct 31 2017 - 21:37:09 EST


Hi Lee,

On 31 October 2017 at 23:28, Lee Jones <lee.jones@xxxxxxxxxx> wrote:
> On Thu, 26 Oct 2017, Baolin Wang wrote:
>
>> This patch adds support for Spreadtrum SC27xx series PMIC MFD core, and It
>> provides communication through the SPI interfaces. The SC27xx series PMICs
>> contains the following 6 major components:
>> - DCDCs
>> - LDOs
>> - Battery management system
>> - Audio codec
>> - User interface function, such as indicator, flash LED
>> - IC level function, such as power on/off, type-c
>>
>> Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxx>
>> ---
>> Changes since v2:
>> - Add more help information.
>> - Define macros for irq base and irq number.
>> - Use devm_mfd_add_devices() instead of mfd_add_devices(), which means
>> we can remove sprd_pmic_remove().
>> - Rename local variables in sprd_pmic_probe().
>>
>> Changes since v1:
>> - Add more documentation to introduce Spreadtrum SC27xx series PMICs.
>> - Modify compatile string property.
>> - Modify reg property.
>> - Remove redundant 'pmic' label.
>> - Change 'should be' to 'must be' for cells properties.
>> ---
>> drivers/mfd/Kconfig | 16 +++
>> drivers/mfd/Makefile | 1 +
>> drivers/mfd/sprd-sc27xx-spi.c | 258 +++++++++++++++++++++++++++++++++++++++++
>> 3 files changed, 275 insertions(+)
>> create mode 100644 drivers/mfd/sprd-sc27xx-spi.c
>
> [...]
>
>> +static int sprd_pmic_spi_read(void *context,
>> + const void *reg, size_t reg_size,
>> + void *val, size_t val_size)
>> +{
>> + struct device *dev = context;
>> + struct spi_device *spi = to_spi_device(dev);
>> + u32 rx_buf[2] = { 0 };
>> + int ret;
>> +
>> + /* Now we only support one PMIC register to read every time. */
>> + if (reg_size != sizeof(u32) || val_size != sizeof(u32))
>> + return -EINVAL;
>> +
>> + rx_buf[0] = *(u32 *)reg;
>
> I still don't like this. It's uuuuuugly!
>
> At the very least, please use an interim variable using a nomenclature
> which describes what it is you're trying to achieve. For instance:
>
> u32 *addr = reg;
>
> rx_buf[0] = addr[0];
>
> Or better still ...
>
> /* Copy address to read from into first element of SPI buffer */
> memcpy(rx_buf, reg, sizeof(u32));

OK. I will change it like you suggested in next version. Thanks.

--
Baolin.wang
Best Regards