[PATCH linux v3 18/18] drivers/fsi: Add SCOM FSI client device driver
Christopher Bostic
christopher.lee.bostic at gmail.com
Thu Oct 13 05:01:39 AEDT 2016
On Tue, Oct 11, 2016 at 7:41 PM, Jeremy Kerr <jk at ozlabs.org> wrote:
> Hi Chris,
>
>> Create a bare bones FSI client device driver that registers
>> with the FSI core.
>
> Cool!
>
>> diff --git a/drivers/fsi/Makefile b/drivers/fsi/Makefile
>> index 2021ce5..3e31d9a 100644
>> --- a/drivers/fsi/Makefile
>> +++ b/drivers/fsi/Makefile
>> @@ -2,3 +2,4 @@
>> obj-$(CONFIG_FSI) += fsi-core.o
>> obj-$(CONFIG_FSI_MASTER_FAKE) += fsi-master-fake.o
>> obj-$(CONFIG_FSI_MASTER_GPIO) += fsi-master-gpio.o
>> +obj-$(CONFIG_FSI_SCOM) += fsi-scom.o
>> diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
>> index c5e7441..15d8635 100644
>> --- a/drivers/fsi/fsi-core.c
>> +++ b/drivers/fsi/fsi-core.c
>> @@ -391,6 +391,27 @@ static int fsi_bus_match(struct device *dev, struct device_driver *drv)
>> return 0;
>> }
>>
>> +int fsidrv_register(struct fsi_driver *fsi_drv)
>> +{
>> + int rc = 0;
>> +
>> + if (!fsi_drv)
>> + return -EINVAL;
>> + if (!fsi_drv->id_table)
>> + return -EINVAL;
>> +
>> + rc = driver_register(&fsi_drv->drv);
>> +
>> + return rc;
>> +}
>> +EXPORT_SYMBOL_GPL(fsidrv_register);
>> +
>> +void fsidrv_unregister(struct fsi_driver *fsi_drv)
>> +{
>> + driver_unregister(&fsi_drv->drv);
>> +}
>> +EXPORT_SYMBOL_GPL(fsidrv_unregister);
>> +
>
> These aren't part of the SCOM engine device driver, they're changes to
> the core. Can you do them as a separate patch?
>
OK, will break these up into separate patches.
>
>> .name = "fsi",
>> .match = fsi_bus_match,
>>
>> diff --git a/drivers/fsi/fsi-scom.c b/drivers/fsi/fsi-scom.c
>> new file mode 100644
>> index 0000000..1600f3b
>> --- /dev/null
>> +++ b/drivers/fsi/fsi-scom.c
>> @@ -0,0 +1,62 @@
>> +/*
>> + * SCOM FSI Client device driver
>> + *
>> + * Copyright (C) IBM Corporation 2016
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>> + */
>> +
>> +#include <linux/fsi.h>
>> +#include <linux/module.h>
>> +
>> +#define FSI_ENGID_SCOM 5
>> +
>> +static int scom_probe(struct device *);
>> +
>> +struct fsi_device_id scom_ids[] = {
>> + {
>> + .engine_type = FSI_ENGID_SCOM,
>> + .version = FSI_VERSION_ANY,
>> + },
>> + {
>> + .engine_type = 0,
>> + }
>
> You can just use { 0 } for the end sentinel:
>
> struct fsi_device_id scom_ids[] = {
> {
> .engine_type = FSI_ENGID_SCOM,
> .version = FSI_VERSION_ANY,
> },
> { 0 }
> }
>
> - which makes it a *tiny* bit more obvious that you're only matching one
> fsi_device_id.
>
Will change.
>> +static int scom_init(void)
>> +{
>> + int rc;
>> +
>> + rc = fsidrv_register(&scom_drv);
>> +
>> + return rc;
>> +}
>
> You have this pattern a few times in your series. It's pretty minor, but
> a little neater if you just return the value directly in cases like
> that. For example:
>
> static int scom_init(void)
> {
> return fsidrv_register(&scom_drv);
> }
Ok will revise that.
Thanks,
Chris
>
> Cheers,
>
>
> Jeremy
More information about the openbmc
mailing list