#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,*/
        .debounce          = 10,        /* 0..17 */
        .mode              = ROT_QUAD_ENC | ROT_DEBE,
        .pm_wakeup         = 1,
+       .pin_list          = per_cnt,
 };
 
 static struct resource bfin_rotary_resources[] = {
 
 #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,*/
        .debounce          = 10,        /* 0..17 */
        .mode              = ROT_QUAD_ENC | ROT_DEBE,
        .pm_wakeup         = 1,
+       .pin_list          = per_cnt,
 };
 
 static struct resource bfin_rotary_resources[] = {
 
 
 #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;
 
 static int bfin_rotary_probe(struct platform_device *pdev)
 {
-       struct bfin_rotary_platform_data *pdata = dev_get_platdata(&pdev->dev);
+       const struct bfin_rotary_platform_data *pdata =
+                                       dev_get_platdata(&pdev->dev);
        struct bfin_rot *rotary;
        struct input_dev *input;
        int error;
                return -EINVAL;
        }
 
-       error = peripheral_request_list(per_cnt, dev_name(&pdev->dev));
-       if (error) {
-               dev_err(&pdev->dev, "requesting peripherals failed\n");
-               return error;
+       if (pdata->pin_list) {
+               error = peripheral_request_list(pdata->pin_list,
+                                               dev_name(&pdev->dev));
+               if (error) {
+                       dev_err(&pdev->dev, "requesting peripherals failed\n");
+                       return error;
+               }
        }
 
        rotary = kzalloc(sizeof(struct bfin_rot), GFP_KERNEL);
 out1:
        input_free_device(input);
        kfree(rotary);
-       peripheral_free_list(per_cnt);
+       if (pdata->pin_list)
+               peripheral_free_list(pdata->pin_list);
 
        return error;
 }
 
 static int bfin_rotary_remove(struct platform_device *pdev)
 {
+       const struct bfin_rotary_platform_data *pdata =
+                                       dev_get_platdata(&pdev->dev);
        struct bfin_rot *rotary = platform_get_drvdata(pdev);
 
        bfin_write_CNT_CONFIG(0);
 
        free_irq(rotary->irq, rotary);
        input_unregister_device(rotary->input);
-       peripheral_free_list(per_cnt);
+
+       if (pdata->pin_list)
+               peripheral_free_list(pdata->pin_list);
 
        kfree(rotary);