drm/gma500: Convert to use new SCU IPC API
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 23 Oct 2020 17:53:21 +0000 (20:53 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 25 Jan 2021 18:05:30 +0000 (20:05 +0200)
Convert the GMA500 driver to use the new SCU IPC API. This allows us
to get rid of the duplicate PMC IPC implementation which is now covered
in SCU IPC driver.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpu/drm/gma500/Kconfig
drivers/gpu/drm/gma500/mdfld_device.c
drivers/gpu/drm/gma500/mdfld_dsi_output.c
drivers/gpu/drm/gma500/mdfld_output.c
drivers/gpu/drm/gma500/oaktrail_device.c
drivers/gpu/drm/gma500/psb_drv.h
drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c

index 0e23c93..1ef2cda 100644 (file)
@@ -30,6 +30,7 @@ config DRM_GMA3600
 config DRM_MEDFIELD
        bool "Intel Medfield support (Experimental)"
        depends on DRM_GMA500 && X86_INTEL_MID
+       select INTEL_SCU_IPC
        help
          Say yes to include support for the Intel Medfield platform.
 
index b83d59b..12193e5 100644 (file)
@@ -8,8 +8,6 @@
 #include <linux/delay.h>
 #include <linux/gpio/machine.h>
 
-#include <asm/intel_scu_ipc.h>
-
 #include "mdfld_dsi_output.h"
 #include "mdfld_output.h"
 #include "mid_bios.h"
index 4aab766..38ec49b 100644 (file)
@@ -30,8 +30,6 @@
 #include <linux/pm_runtime.h>
 #include <linux/gpio/consumer.h>
 
-#include <asm/intel_scu_ipc.h>
-
 #include "mdfld_dsi_dpi.h"
 #include "mdfld_dsi_output.h"
 #include "mdfld_dsi_pkg_sender.h"
index c95966b..518417f 100644 (file)
@@ -25,6 +25,8 @@
  * Scott Rowe <scott.m.rowe@intel.com>
 */
 
+#include <asm/intel_scu_ipc.h>
+
 #include "mdfld_output.h"
 #include "mdfld_dsi_dpi.h"
 #include "mdfld_dsi_output.h"
@@ -58,11 +60,14 @@ static void mdfld_init_panel(struct drm_device *dev, int mipi_pipe,
        }
 }
 
-
 int mdfld_output_init(struct drm_device *dev)
 {
        struct drm_psb_private *dev_priv = dev->dev_private;
 
+       dev_priv->scu = devm_intel_scu_ipc_dev_get(&dev->pdev->dev);
+       if (!dev_priv->scu)
+               return -EPROBE_DEFER;
+
        /* FIXME: hardcoded for now */
        dev_priv->mdfld_panel_id = TC35876X;
        /* MIPI panel 1 */
@@ -71,4 +76,3 @@ int mdfld_output_init(struct drm_device *dev)
        mdfld_init_panel(dev, 1, HDMI);
        return 0;
 }
-
index 8754290..0c1a66b 100644 (file)
@@ -10,9 +10,6 @@
 #include <linux/dmi.h>
 #include <linux/module.h>
 
-#include <asm/intel-mid.h>
-#include <asm/intel_scu_ipc.h>
-
 #include <drm/drm.h>
 
 #include "intel_bios.h"
index 5b7f7a3..938efdd 100644 (file)
@@ -428,6 +428,8 @@ struct psb_ops;
 
 #define PSB_NUM_PIPE           3
 
+struct intel_scu_ipc_dev;
+
 struct drm_psb_private {
        struct drm_device *dev;
        struct pci_dev *aux_pdev; /* Currently only used by mrst */
@@ -567,6 +569,7 @@ struct drm_psb_private {
         * Used for modifying backlight from
         * xrandr -- consider removing and using HAL instead
         */
+       struct intel_scu_ipc_dev *scu;
        struct backlight_device *backlight_device;
        struct drm_property *backlight_property;
        bool backlight_enabled;
index e5bdd99..7d012db 100644 (file)
@@ -444,6 +444,7 @@ static inline u16 calc_clkdiv(unsigned long baseclk, unsigned int f)
 
 static void tc35876x_brightness_init(struct drm_device *dev)
 {
+       struct drm_psb_private *dev_priv = dev->dev_private;
        int ret;
        u8 pwmctrl;
        u16 clkdiv;
@@ -451,23 +452,23 @@ static void tc35876x_brightness_init(struct drm_device *dev)
        /* Make sure the PWM reference is the 19.2 MHz system clock. Read first
         * instead of setting directly to catch potential conflicts between PWM
         * users. */
-       ret = intel_scu_ipc_ioread8(GPIOPWMCTRL, &pwmctrl);
+       ret = intel_scu_ipc_dev_ioread8(dev_priv->scu, GPIOPWMCTRL, &pwmctrl);
        if (ret || pwmctrl != 0x01) {
                if (ret)
                        dev_err(&dev->pdev->dev, "GPIOPWMCTRL read failed\n");
                else
                        dev_warn(&dev->pdev->dev, "GPIOPWMCTRL was not set to system clock (pwmctrl = 0x%02x)\n", pwmctrl);
 
-               ret = intel_scu_ipc_iowrite8(GPIOPWMCTRL, 0x01);
+               ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, GPIOPWMCTRL, 0x01);
                if (ret)
                        dev_err(&dev->pdev->dev, "GPIOPWMCTRL set failed\n");
        }
 
        clkdiv = calc_clkdiv(SYSTEMCLK, PWM_FREQUENCY);
 
-       ret = intel_scu_ipc_iowrite8(PWM0CLKDIV1, (clkdiv >> 8) & 0xff);
+       ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, PWM0CLKDIV1, (clkdiv >> 8) & 0xff);
        if (!ret)
-               ret = intel_scu_ipc_iowrite8(PWM0CLKDIV0, clkdiv & 0xff);
+               ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, PWM0CLKDIV0, clkdiv & 0xff);
 
        if (ret)
                dev_err(&dev->pdev->dev, "PWM0CLKDIV set failed\n");
@@ -480,6 +481,7 @@ static void tc35876x_brightness_init(struct drm_device *dev)
 
 void tc35876x_brightness_control(struct drm_device *dev, int level)
 {
+       struct drm_psb_private *dev_priv = dev->dev_private;
        int ret;
        u8 duty_val;
        u8 panel_duty_val;
@@ -495,7 +497,7 @@ void tc35876x_brightness_control(struct drm_device *dev, int level)
        panel_duty_val = (2 * level - 100) * 0xA9 /
                         MDFLD_DSI_BRIGHTNESS_MAX_LEVEL + 0x56;
 
-       ret = intel_scu_ipc_iowrite8(PWM0DUTYCYCLE, duty_val);
+       ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, PWM0DUTYCYCLE, duty_val);
        if (ret)
                dev_err(&tc35876x_client->dev, "%s: ipc write fail\n",
                        __func__);