Re: [PATCH v4 3/5] mfd: hi655x: Add hi665x pmic driver

From: Lee Jones
Date: Mon Jan 11 2016 - 00:49:49 EST


Obviously I am unable to accept (or even review) this patch until
these issues are resolved. Please fix and resubmit the set.

On Tue, 05 Jan 2016, kbuild test robot wrote:
> [auto build test WARNING on v4.4-rc8]
> [also build test WARNING on next-20160104]
> [if your patch is applied to the wrong git tree, please drop us a note to help improving the system]
>
> url: https://github.com/0day-ci/linux/commits/Chen-Feng/Add-Support-for-Hi6220-PMIC-Hi6553-MFD-Core/20160104-203635
> config: parisc-allmodconfig (attached as .config)
> reproduce:
> wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # save the attached .config to linux build tree
> make.cross ARCH=parisc
>
> All warnings (new ones prefixed by >>):
>
> In file included from include/linux/platform_device.h:14:0,
> from drivers/mfd/hi655x-pmic.c:19:
> include/linux/device.h:1329:1: warning: data definition has no type or storage class
> module_init(__driver##_init); \
> ^
> include/linux/platform_device.h:222:2: note: in expansion of macro 'module_driver'
> module_driver(__platform_driver, platform_driver_register, \
> ^
> >> drivers/mfd/hi655x-pmic.c:156:1: note: in expansion of macro 'module_platform_driver'
> module_platform_driver(hi655x_pmic_driver);
> ^
> include/linux/device.h:1329:1: error: type defaults to 'int' in declaration of 'module_init' [-Werror=implicit-int]
> module_init(__driver##_init); \
> ^
> include/linux/platform_device.h:222:2: note: in expansion of macro 'module_driver'
> module_driver(__platform_driver, platform_driver_register, \
> ^
> >> drivers/mfd/hi655x-pmic.c:156:1: note: in expansion of macro 'module_platform_driver'
> module_platform_driver(hi655x_pmic_driver);
> ^
> drivers/mfd/hi655x-pmic.c:156:1: warning: parameter names (without types) in function declaration
> In file included from include/linux/platform_device.h:14:0,
> from drivers/mfd/hi655x-pmic.c:19:
> include/linux/device.h:1334:1: warning: data definition has no type or storage class
> module_exit(__driver##_exit);
> ^
> include/linux/platform_device.h:222:2: note: in expansion of macro 'module_driver'
> module_driver(__platform_driver, platform_driver_register, \
> ^
> >> drivers/mfd/hi655x-pmic.c:156:1: note: in expansion of macro 'module_platform_driver'
> module_platform_driver(hi655x_pmic_driver);
> ^
> include/linux/device.h:1334:1: error: type defaults to 'int' in declaration of 'module_exit' [-Werror=implicit-int]
> module_exit(__driver##_exit);
> ^
> include/linux/platform_device.h:222:2: note: in expansion of macro 'module_driver'
> module_driver(__platform_driver, platform_driver_register, \
> ^
> >> drivers/mfd/hi655x-pmic.c:156:1: note: in expansion of macro 'module_platform_driver'
> module_platform_driver(hi655x_pmic_driver);
> ^
> drivers/mfd/hi655x-pmic.c:156:1: warning: parameter names (without types) in function declaration
> drivers/mfd/hi655x-pmic.c:158:15: error: expected declaration specifiers or '...' before string constant
> MODULE_AUTHOR("Chen Feng <puck.chen@xxxxxxxxxxxxx>");
> ^
> drivers/mfd/hi655x-pmic.c:159:20: error: expected declaration specifiers or '...' before string constant
> MODULE_DESCRIPTION("Hisi hi655x pmic driver");
> ^
> drivers/mfd/hi655x-pmic.c:160:16: error: expected declaration specifiers or '...' before string constant
> MODULE_LICENSE("GPL v2");
> ^
> In file included from include/linux/platform_device.h:14:0,
> from drivers/mfd/hi655x-pmic.c:19:
> drivers/mfd/hi655x-pmic.c:156:24: warning: 'hi655x_pmic_driver_init' defined but not used [-Wunused-function]
> module_platform_driver(hi655x_pmic_driver);
> ^
> include/linux/device.h:1325:19: note: in definition of macro 'module_driver'
> static int __init __driver##_init(void) \
> ^
> >> drivers/mfd/hi655x-pmic.c:156:1: note: in expansion of macro 'module_platform_driver'
> module_platform_driver(hi655x_pmic_driver);
> ^
> drivers/mfd/hi655x-pmic.c:156:24: warning: 'hi655x_pmic_driver_exit' defined but not used [-Wunused-function]
> module_platform_driver(hi655x_pmic_driver);
> ^
> include/linux/device.h:1330:20: note: in definition of macro 'module_driver'
> static void __exit __driver##_exit(void) \
> ^
> >> drivers/mfd/hi655x-pmic.c:156:1: note: in expansion of macro 'module_platform_driver'
> module_platform_driver(hi655x_pmic_driver);
> ^
> cc1: some warnings being treated as errors
>
> vim +/module_platform_driver +156 drivers/mfd/hi655x-pmic.c
>
> 13
> 14 #include <linux/io.h>
> 15 #include <linux/interrupt.h>
> 16 #include <linux/init.h>
> 17 #include <linux/gpio.h>
> 18 #include <linux/of_gpio.h>
> > 19 #include <linux/platform_device.h>
> 20 #include <linux/of_platform.h>
> 21 #include <linux/mfd/hi655x-pmic.h>
> 22 #include <linux/regmap.h>
> 23
> 24 static const struct of_device_id of_hi655x_pmic_child_match_tbl[] = {
> 25 { .compatible = "hisilicon,hi655x-regulator", },
> 26 {},
> 27 };
> 28
> 29 static const struct of_device_id of_hi655x_pmic_match_tbl[] = {
> 30 { .compatible = "hisilicon,hi655x-pmic", },
> 31 {},
> 32 };
> 33
> 34 static const struct regmap_irq hi655x_irqs[] = {
> 35 { .reg_offset = 0, .mask = OTMP_D1R_INT },
> 36 { .reg_offset = 0, .mask = VSYS_2P5_R_INT },
> 37 { .reg_offset = 0, .mask = VSYS_UV_D3R_INT },
> 38 { .reg_offset = 0, .mask = VSYS_6P0_D200UR_INT },
> 39 { .reg_offset = 0, .mask = PWRON_D4SR_INT },
> 40 { .reg_offset = 0, .mask = PWRON_D20F_INT },
> 41 { .reg_offset = 0, .mask = PWRON_D20R_INT },
> 42 { .reg_offset = 0, .mask = RESERVE_INT },
> 43 };
> 44
> 45 static const struct regmap_irq_chip hi655x_irq_chip = {
> 46 .name = "hi655x-pmic",
> 47 .irqs = hi655x_irqs,
> 48 .num_regs = 1,
> 49 .num_irqs = ARRAY_SIZE(hi655x_irqs),
> 50 .status_base = HI655X_IRQ_STAT_BASE,
> 51 .mask_base = HI655X_IRQ_MASK_BASE,
> 52 };
> 53
> 54 static unsigned int hi655x_pmic_get_version(struct hi655x_pmic *pmic)
> 55 {
> 56 u32 val;
> 57
> 58 regmap_read(pmic->regmap,
> 59 HI655X_BUS_ADDR(HI655X_VER_REG), &val);
> 60
> 61 return val;
> 62 }
> 63
> 64 static struct regmap_config hi655x_regmap_config = {
> 65 .reg_bits = 32,
> 66 .reg_stride = HI655X_STRIDE,
> 67 .val_bits = 8,
> 68 .max_register = HI655X_BUS_ADDR(0xFFF),
> 69 };
> 70
> 71 static void hi655x_local_irq_clear(struct regmap *map)
> 72 {
> 73 int i;
> 74
> 75 regmap_write(map, HI655X_ANA_IRQM_BASE, HI655X_IRQ_CLR);
> 76 for (i = 0; i < HI655X_IRQ_ARRAY; i++) {
> 77 regmap_write(map, HI655X_IRQ_STAT_BASE + i * HI655X_STRIDE,
> 78 HI655X_IRQ_CLR);
> 79 }
> 80 }
> 81
> 82 static int hi655x_pmic_probe(struct platform_device *pdev)
> 83 {
> 84 int ret;
> 85 struct hi655x_pmic *pmic;
> 86 struct device *dev = &pdev->dev;
> 87 struct device_node *np = dev->of_node;
> 88 void __iomem *base;
> 89
> 90 pmic = devm_kzalloc(dev, sizeof(*pmic), GFP_KERNEL);
> 91 pmic->dev = dev;
> 92
> 93 pmic->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> 94 if (!pmic->res) {
> 95 dev_err(dev, "platform_get_resource err\n");
> 96 return -ENOENT;
> 97 }
> 98 base = devm_ioremap_resource(dev, pmic->res);
> 99 if (!base) {
> 100 dev_err(dev, "cannot map register memory\n");
> 101 return -ENOMEM;
> 102 }
> 103 pmic->regmap = devm_regmap_init_mmio_clk(dev, NULL, base,
> 104 &hi655x_regmap_config);
> 105
> 106 pmic->ver = hi655x_pmic_get_version(pmic);
> 107 if ((pmic->ver < PMU_VER_START) || (pmic->ver > PMU_VER_END)) {
> 108 dev_warn(dev, "it is wrong pmu version\n");
> 109 return -EINVAL;
> 110 }
> 111
> 112 hi655x_local_irq_clear(pmic->regmap);
> 113
> 114 pmic->gpio = of_get_named_gpio(np, "pmic-gpios", 0);
> 115 if (!gpio_is_valid(pmic->gpio)) {
> 116 dev_err(dev, "cannot get the pmic-gpios\n");
> 117 return -ENODEV;
> 118 }
> 119
> 120 ret = devm_gpio_request_one(dev, pmic->gpio, GPIOF_IN, "hi655x_pmic_irq");
> 121 if (ret < 0) {
> 122 dev_err(dev, "failed to request gpio %d ret = %d\n",
> 123 pmic->gpio, ret);
> 124 return ret;
> 125 }
> 126
> 127 ret = regmap_add_irq_chip(pmic->regmap, gpio_to_irq(pmic->gpio),
> 128 IRQF_TRIGGER_LOW | IRQF_NO_SUSPEND, 0,
> 129 &hi655x_irq_chip, &pmic->irq_data);
> 130 if (ret) {
> 131 dev_err(dev, "add pmic irq chip error! ret %d\n", ret);
> 132 return ret;
> 133 }
> 134
> 135 /* bind pmic to device */
> 136 platform_set_drvdata(pdev, pmic);
> 137
> 138 /* populate sub nodes */
> 139 ret = of_platform_populate(np, of_hi655x_pmic_child_match_tbl,
> 140 NULL, dev);
> 141 if (ret) {
> 142 regmap_del_irq_chip(pmic->irq, pmic->irq_data);
> 143 return ret;
> 144 }
> 145
> 146 return 0;
> 147 }
> 148
> 149 static struct platform_driver hi655x_pmic_driver = {
> 150 .driver = {
> 151 .name = "hi655x-pmic",
> 152 .of_match_table = of_hi655x_pmic_match_tbl,
> 153 },
> 154 .probe = hi655x_pmic_probe,
> 155 };
> > 156 module_platform_driver(hi655x_pmic_driver);
> 157
> 158 MODULE_AUTHOR("Chen Feng <puck.chen@xxxxxxxxxxxxx>");
> 159 MODULE_DESCRIPTION("Hisi hi655x pmic driver");
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation



--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org â Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog