Message ID | 1423036686-31891-1-git-send-email-sonic.adi@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Hi Sonic, On Wed, Feb 04, 2015 at 03:58:04PM +0800, Sonic Zhang wrote: > @@ -102,7 +95,7 @@ static int bfin_rotary_probe(struct platform_device *pdev) > return -EINVAL; > } > > - error = peripheral_request_list(per_cnt, dev_name(&pdev->dev)); > + error = peripheral_request_list(pdata->pin_list, dev_name(&pdev->dev)); I do not think the driver will be happy with pdata->oin_list == NULL here. > if (error) { > dev_err(&pdev->dev, "requesting peripherals failed\n"); > return error; > @@ -197,6 +190,7 @@ out1: > > static int bfin_rotary_remove(struct platform_device *pdev) > { > + struct bfin_rotary_platform_data *pdata = dev_get_platdata(&pdev->dev); Why do you need this change? > struct bfin_rot *rotary = platform_get_drvdata(pdev); > > bfin_write_CNT_CONFIG(0); > @@ -204,7 +198,7 @@ static int bfin_rotary_remove(struct platform_device *pdev) > > free_irq(rotary->irq, pdev); > input_unregister_device(rotary->input); > - peripheral_free_list(per_cnt); > + peripheral_free_list(pdata->pin_list); Same here: NULL will cause severe indigestion. Thanks.
Hi Dmitry, On Thu, Feb 5, 2015 at 3:44 AM, Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote: > Hi Sonic, > > On Wed, Feb 04, 2015 at 03:58:04PM +0800, Sonic Zhang wrote: >> @@ -102,7 +95,7 @@ static int bfin_rotary_probe(struct platform_device *pdev) >> return -EINVAL; >> } >> >> - error = peripheral_request_list(per_cnt, dev_name(&pdev->dev)); >> + error = peripheral_request_list(pdata->pin_list, dev_name(&pdev->dev)); > > I do not think the driver will be happy with pdata->oin_list == NULL > here. When pinctrl API is used in bf609 and bf548, peripheral_requst and peripheral_free macros are defined empty in arch/blackfin/include/asm/pinmux.h. So, pdata->oin_list == NULL is never mind. I can add a null array point check to peripheral_request_list() and peripheral_free_list() in a different patch for Blackfin arch code. #ifdef CONFIG_PINCTRL #define peripheral_request(per, label) (0) #define peripheral_free(per) #define peripheral_request_list(per, label) (0) #define peripheral_free_list(per) #else > >> if (error) { >> dev_err(&pdev->dev, "requesting peripherals failed\n"); >> return error; >> @@ -197,6 +190,7 @@ out1: >> >> static int bfin_rotary_remove(struct platform_device *pdev) >> { >> + struct bfin_rotary_platform_data *pdata = dev_get_platdata(&pdev->dev); > > Why do you need this change? The pdata struct is used to pass pin_list array to peripheral_free_list(). > >> struct bfin_rot *rotary = platform_get_drvdata(pdev); >> >> bfin_write_CNT_CONFIG(0); >> @@ -204,7 +198,7 @@ static int bfin_rotary_remove(struct platform_device *pdev) >> >> free_irq(rotary->irq, pdev); >> input_unregister_device(rotary->input); >> - peripheral_free_list(per_cnt); >> + peripheral_free_list(pdata->pin_list); > > Same here: NULL will cause severe indigestion. > See my comment up. Regards, Sonic -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Dmitry, On Thu, Feb 5, 2015 at 3:44 AM, Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote: > Hi Sonic, > > On Wed, Feb 04, 2015 at 03:58:04PM +0800, Sonic Zhang wrote: >> @@ -102,7 +95,7 @@ static int bfin_rotary_probe(struct platform_device *pdev) >> return -EINVAL; >> } >> >> - error = peripheral_request_list(per_cnt, dev_name(&pdev->dev)); >> + error = peripheral_request_list(pdata->pin_list, dev_name(&pdev->dev)); > > I do not think the driver will be happy with pdata->oin_list == NULL > here. I forgot one more replacement of variable per_cnt in bfin_rotary_probe. I will update. Sonic -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/blackfin/mach-bf527/boards/ad7160eval.c b/arch/blackfin/mach-bf527/boards/ad7160eval.c index beb011b..029a050 100644 --- a/arch/blackfin/mach-bf527/boards/ad7160eval.c +++ b/arch/blackfin/mach-bf527/boards/ad7160eval.c @@ -668,6 +668,13 @@ static struct platform_device bfin_sport1_uart_device = { #if IS_ENABLED(CONFIG_INPUT_BFIN_ROTARY) #include <linux/platform_data/bfin_rotary.h> +static const u16 per_cnt[] = { + P_CNT_CUD, + P_CNT_CDG, + P_CNT_CZM, + 0 +}; + static struct bfin_rotary_platform_data bfin_rotary_data = { /*.rotary_up_key = KEY_UP,*/ /*.rotary_down_key = KEY_DOWN,*/ @@ -676,6 +683,7 @@ static struct bfin_rotary_platform_data bfin_rotary_data = { .debounce = 10, /* 0..17 */ .mode = ROT_QUAD_ENC | ROT_DEBE, .pm_wakeup = 1, + .pin_list = per_cnt, }; static struct resource bfin_rotary_resources[] = { diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c index 728cda4..cc80c5b 100644 --- a/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/arch/blackfin/mach-bf527/boards/ezkit.c @@ -1094,6 +1094,13 @@ static struct platform_device bfin_device_gpiokeys = { #if IS_ENABLED(CONFIG_INPUT_BFIN_ROTARY) #include <linux/platform_data/bfin_rotary.h> +static const u16 per_cnt[] = { + P_CNT_CUD, + P_CNT_CDG, + P_CNT_CZM, + 0 +}; + static struct bfin_rotary_platform_data bfin_rotary_data = { /*.rotary_up_key = KEY_UP,*/ /*.rotary_down_key = KEY_DOWN,*/ @@ -1102,6 +1109,7 @@ static struct bfin_rotary_platform_data bfin_rotary_data = { .debounce = 10, /* 0..17 */ .mode = ROT_QUAD_ENC | ROT_DEBE, .pm_wakeup = 1, + .pin_list = per_cnt, }; static struct resource bfin_rotary_resources[] = { diff --git a/drivers/input/misc/bfin_rotary.c b/drivers/input/misc/bfin_rotary.c index 8f6c7cd..dd62fc9 100644 --- a/drivers/input/misc/bfin_rotary.c +++ b/drivers/input/misc/bfin_rotary.c @@ -16,13 +16,6 @@ #include <asm/portmux.h> -static const u16 per_cnt[] = { - P_CNT_CUD, - P_CNT_CDG, - P_CNT_CZM, - 0 -}; - struct bfin_rot { struct input_dev *input; int irq; @@ -102,7 +95,7 @@ static int bfin_rotary_probe(struct platform_device *pdev) return -EINVAL; } - error = peripheral_request_list(per_cnt, dev_name(&pdev->dev)); + error = peripheral_request_list(pdata->pin_list, dev_name(&pdev->dev)); if (error) { dev_err(&pdev->dev, "requesting peripherals failed\n"); return error; @@ -197,6 +190,7 @@ out1: static int bfin_rotary_remove(struct platform_device *pdev) { + struct bfin_rotary_platform_data *pdata = dev_get_platdata(&pdev->dev); struct bfin_rot *rotary = platform_get_drvdata(pdev); bfin_write_CNT_CONFIG(0); @@ -204,7 +198,7 @@ static int bfin_rotary_remove(struct platform_device *pdev) free_irq(rotary->irq, pdev); input_unregister_device(rotary->input); - peripheral_free_list(per_cnt); + peripheral_free_list(pdata->pin_list); kfree(rotary); diff --git a/include/linux/platform_data/bfin_rotary.h b/include/linux/platform_data/bfin_rotary.h index 8895a75..9882937 100644 --- a/include/linux/platform_data/bfin_rotary.h +++ b/include/linux/platform_data/bfin_rotary.h @@ -40,6 +40,7 @@ struct bfin_rotary_platform_data { unsigned short debounce; /* 0..17 */ unsigned short mode; unsigned short pm_wakeup; + unsigned short *pin_list; }; /* CNT_CONFIG bitmasks */