[PATCH v3 2/3] intel-mid: Add valid error messages on init failure

From: Kuppuswamy Sathyanarayanan
Date: Thu Sep 08 2016 - 22:11:44 EST


Added valid error/warning messages to platform data
initalization failures in SFI device libs code.

Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>
---
.../intel-mid/device_libs/platform_emc1403.c | 18 ++++++++++++++----
.../platform/intel-mid/device_libs/platform_ipc.c | 5 ++++-
.../intel-mid/device_libs/platform_lis331.c | 20 +++++++++++++++-----
.../intel-mid/device_libs/platform_max7315.c | 10 +++++++---
.../intel-mid/device_libs/platform_mpu3050.c | 9 +++++++--
.../intel-mid/device_libs/platform_pcal9555a.c | 5 ++++-
.../intel-mid/device_libs/platform_tca6416.c | 6 +++++-
arch/x86/platform/intel-mid/sfi.c | 21 +++++++++++++++++----
8 files changed, 73 insertions(+), 21 deletions(-)

diff --git a/arch/x86/platform/intel-mid/device_libs/platform_emc1403.c b/arch/x86/platform/intel-mid/device_libs/platform_emc1403.c
index c259fb6..bd776b04 100644
--- a/arch/x86/platform/intel-mid/device_libs/platform_emc1403.c
+++ b/arch/x86/platform/intel-mid/device_libs/platform_emc1403.c
@@ -15,17 +15,27 @@
#include <linux/i2c.h>
#include <asm/intel-mid.h>

+#define EMC1403_THERMAL_INT "thermal_int"
+#define EMC1403_THERMAL_ALERT_INT "thermal_alert"
+
static void __init *emc1403_platform_data(void *info)
{
static short intr2nd_pdata;
struct i2c_board_info *i2c_info = info;
- int intr = get_gpio_by_name("thermal_int");
- int intr2nd = get_gpio_by_name("thermal_alert");
+ int intr = get_gpio_by_name(EMC1403_THERMAL_INT);
+ int intr2nd = get_gpio_by_name(EMC1403_THERMAL_ALERT_INT);

- if (intr < 0)
+ if (intr < 0) {
+ pr_err("%s: Can't find %s GPIO interrupt\n", __func__,
+ EMC1403_THERMAL_INT);
return NULL;
- if (intr2nd < 0)
+ }
+
+ if (intr2nd < 0) {
+ pr_err("%s: Can't find %s GPIO interrupt\n", __func__,
+ EMC1403_THERMAL_ALERT_INT);
return NULL;
+ }

i2c_info->irq = intr + INTEL_MID_IRQ_OFFSET;
intr2nd_pdata = intr2nd + INTEL_MID_IRQ_OFFSET;
diff --git a/arch/x86/platform/intel-mid/device_libs/platform_ipc.c b/arch/x86/platform/intel-mid/device_libs/platform_ipc.c
index a84b73d..6704694 100644
--- a/arch/x86/platform/intel-mid/device_libs/platform_ipc.c
+++ b/arch/x86/platform/intel-mid/device_libs/platform_ipc.c
@@ -42,8 +42,11 @@ void __init ipc_device_handler(struct sfi_device_table_entry *pentry,
* On Medfield the platform device creation is handled by the MSIC
* MFD driver so we don't need to do it here.
*/
- if (intel_mid_has_msic())
+ if (intel_mid_has_msic()) {
+ pr_err("%s: device %s will be handled by MSIC mfd driver\n",
+ __func__, pentry->name);
return;
+ }

pdev = platform_device_alloc(pentry->name, 0);
if (pdev == NULL) {
diff --git a/arch/x86/platform/intel-mid/device_libs/platform_lis331.c b/arch/x86/platform/intel-mid/device_libs/platform_lis331.c
index 8be5d40..393c23e 100644
--- a/arch/x86/platform/intel-mid/device_libs/platform_lis331.c
+++ b/arch/x86/platform/intel-mid/device_libs/platform_lis331.c
@@ -14,17 +14,27 @@
#include <linux/gpio.h>
#include <asm/intel-mid.h>

+#define LIS331DL_ACCEL_INT1 "accel_int"
+#define LIS331DL_ACCEL_INT2 "accel_2"
+
static void __init *lis331dl_platform_data(void *info)
{
static short intr2nd_pdata;
struct i2c_board_info *i2c_info = info;
- int intr = get_gpio_by_name("accel_int");
- int intr2nd = get_gpio_by_name("accel_2");
+ int intr = get_gpio_by_name(LIS331DL_ACCEL_INT1);
+ int intr2nd = get_gpio_by_name(LIS331DL_ACCEL_INT2);

- if (intr < 0)
+ if (intr < 0) {
+ pr_err("%s: Can't find %s GPIO interrupt\n", __func__,
+ LIS331DL_ACCEL_INT1);
return ERR_PTR(intr);
- if (intr2nd < 0)
- ERR_PTR(intr2nd);
+ }
+
+ if (intr2nd < 0) {
+ pr_err("%s: Can't find %s GPIO interrupt\n", __func__,
+ LIS331DL_ACCEL_INT2);
+ return ERR_PTR(intr2nd);
+ }

i2c_info->irq = intr + INTEL_MID_IRQ_OFFSET;
intr2nd_pdata = intr2nd + INTEL_MID_IRQ_OFFSET;
diff --git a/arch/x86/platform/intel-mid/device_libs/platform_max7315.c b/arch/x86/platform/intel-mid/device_libs/platform_max7315.c
index 34dc59d..8989f81 100644
--- a/arch/x86/platform/intel-mid/device_libs/platform_max7315.c
+++ b/arch/x86/platform/intel-mid/device_libs/platform_max7315.c
@@ -29,8 +29,8 @@ static void __init *max7315_platform_data(void *info)
char intr_pin_name[SFI_NAME_LEN + 1];

if (nr == MAX7315_NUM) {
- pr_err("too many max7315s, we only support %d\n",
- MAX7315_NUM);
+ pr_err("%s: Too many instances, only %d supported\n", __func__,
+ MAX7315_NUM);
return ERR_PTR(-ENOMEM);
}
/* we have several max7315 on the board, we only need load several
@@ -48,8 +48,12 @@ static void __init *max7315_platform_data(void *info)
gpio_base = get_gpio_by_name(base_pin_name);
intr = get_gpio_by_name(intr_pin_name);

- if (gpio_base < 0)
+ if (gpio_base < 0) {
+ pr_warn("%s: falling back to dynamic gpio allocation\n",
+ __func__);
return NULL;
+ }
+
max7315->gpio_base = gpio_base;
if (intr != -1) {
i2c_info->irq = intr + INTEL_MID_IRQ_OFFSET;
diff --git a/arch/x86/platform/intel-mid/device_libs/platform_mpu3050.c b/arch/x86/platform/intel-mid/device_libs/platform_mpu3050.c
index f434f88..c79c87f 100644
--- a/arch/x86/platform/intel-mid/device_libs/platform_mpu3050.c
+++ b/arch/x86/platform/intel-mid/device_libs/platform_mpu3050.c
@@ -14,13 +14,18 @@
#include <linux/i2c.h>
#include <asm/intel-mid.h>

+#define MPU3050_INT "mpu3050_int"
+
static void *mpu3050_platform_data(void *info)
{
struct i2c_board_info *i2c_info = info;
- int intr = get_gpio_by_name("mpu3050_int");
+ int intr = get_gpio_by_name(MPU3050_INT);

- if (intr < 0)
+ if (intr < 0) {
+ pr_err("%s: Can't find %s GPIO interrupt\n", __func__,
+ MPU3050_INT);
return ERR_PTR(intr);
+ }

i2c_info->irq = intr + INTEL_MID_IRQ_OFFSET;
return NULL;
diff --git a/arch/x86/platform/intel-mid/device_libs/platform_pcal9555a.c b/arch/x86/platform/intel-mid/device_libs/platform_pcal9555a.c
index 563f77f..cde764e 100644
--- a/arch/x86/platform/intel-mid/device_libs/platform_pcal9555a.c
+++ b/arch/x86/platform/intel-mid/device_libs/platform_pcal9555a.c
@@ -41,8 +41,11 @@ static void __init *pcal9555a_platform_data(void *info)
intr = get_gpio_by_name(intr_pin_name);

/* Check if the SFI record valid */
- if (gpio_base == -1)
+ if (gpio_base == -1) {
+ pr_warn("%s: falling back to dynamic gpio allocation\n",
+ __func__);
return NULL;
+ }

if (nr >= PCAL9555A_NUM) {
pr_err("%s: Too many instances, only %d supported\n", __func__,
diff --git a/arch/x86/platform/intel-mid/device_libs/platform_tca6416.c b/arch/x86/platform/intel-mid/device_libs/platform_tca6416.c
index 4f41372..4d4393e 100644
--- a/arch/x86/platform/intel-mid/device_libs/platform_tca6416.c
+++ b/arch/x86/platform/intel-mid/device_libs/platform_tca6416.c
@@ -34,8 +34,12 @@ static void *tca6416_platform_data(void *info)
gpio_base = get_gpio_by_name(base_pin_name);
intr = get_gpio_by_name(intr_pin_name);

- if (gpio_base < 0)
+ if (gpio_base < 0) {
+ pr_warn("%s: falling back to dynamic gpio allocation\n",
+ __func__);
return NULL;
+ }
+
tca6416.gpio_base = gpio_base;
if (intr >= 0) {
i2c_info->irq = intr + INTEL_MID_IRQ_OFFSET;
diff --git a/arch/x86/platform/intel-mid/sfi.c b/arch/x86/platform/intel-mid/sfi.c
index 051d264..78ee7eb 100644
--- a/arch/x86/platform/intel-mid/sfi.c
+++ b/arch/x86/platform/intel-mid/sfi.c
@@ -335,9 +335,13 @@ static void __init sfi_handle_ipc_dev(struct sfi_device_table_entry *pentry,

pr_debug("IPC bus, name = %16.16s, irq = 0x%2x\n",
pentry->name, pentry->irq);
+
pdata = intel_mid_sfi_get_pdata(dev, pentry);
- if (IS_ERR(pdata))
+ if (IS_ERR(pdata)) {
+ pr_debug("%s: Can't get platform data for %s\n", __func__,
+ pentry->name);
return;
+ }

pdev = platform_device_alloc(pentry->name, 0);
if (pdev == NULL) {
@@ -371,8 +375,11 @@ static void __init sfi_handle_spi_dev(struct sfi_device_table_entry *pentry,
spi_info.chip_select);

pdata = intel_mid_sfi_get_pdata(dev, &spi_info);
- if (IS_ERR(pdata))
+ if (IS_ERR(pdata)) {
+ pr_debug("%s: Can't get platform data for %s\n", __func__,
+ pentry->name);
return;
+ }

spi_info.platform_data = pdata;
if (dev->delay)
@@ -398,8 +405,11 @@ static void __init sfi_handle_i2c_dev(struct sfi_device_table_entry *pentry,
i2c_info.addr);
pdata = intel_mid_sfi_get_pdata(dev, &i2c_info);
i2c_info.platform_data = pdata;
- if (IS_ERR(pdata))
+ if (IS_ERR(pdata)) {
+ pr_debug("%s: Can't get platform data for %s\n", __func__,
+ pentry->name);
return;
+ }

if (dev->delay)
intel_scu_i2c_device_register(pentry->host_num, &i2c_info);
@@ -424,8 +434,11 @@ static void __init sfi_handle_sd_dev(struct sfi_device_table_entry *pentry,
sd_info.max_clk,
sd_info.addr);
pdata = intel_mid_sfi_get_pdata(dev, &sd_info);
- if (IS_ERR(pdata))
+ if (IS_ERR(pdata)) {
+ pr_debug("%s: Can't get platform data for %s\n", __func__,
+ pentry->name);
return;
+ }

/* Nothing we can do with this for now */
sd_info.platform_data = pdata;
--
2.7.4