| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) 2015 Samsung Electronics Co.Ltd |
|---|
| 3 | 4 | * Authors: |
|---|
| 4 | 5 | * Hyungwon Hwang <human.hwang@samsung.com> |
|---|
| 5 | | - * |
|---|
| 6 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 7 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 8 | | - * published by the Free Software Foundationr |
|---|
| 9 | 6 | */ |
|---|
| 10 | 7 | |
|---|
| 11 | | -#include <linux/platform_device.h> |
|---|
| 12 | | -#include <video/of_videomode.h> |
|---|
| 13 | | -#include <linux/of_address.h> |
|---|
| 14 | | -#include <video/videomode.h> |
|---|
| 15 | | -#include <linux/module.h> |
|---|
| 16 | | -#include <linux/delay.h> |
|---|
| 17 | | -#include <linux/mutex.h> |
|---|
| 18 | | -#include <linux/of.h> |
|---|
| 19 | | -#include <linux/of_graph.h> |
|---|
| 20 | 8 | #include <linux/clk.h> |
|---|
| 21 | 9 | #include <linux/component.h> |
|---|
| 22 | | -#include <linux/pm_runtime.h> |
|---|
| 23 | | -#include <drm/drmP.h> |
|---|
| 24 | | -#include <drm/drm_encoder.h> |
|---|
| 10 | +#include <linux/delay.h> |
|---|
| 25 | 11 | #include <linux/mfd/syscon.h> |
|---|
| 12 | +#include <linux/module.h> |
|---|
| 13 | +#include <linux/mutex.h> |
|---|
| 14 | +#include <linux/of.h> |
|---|
| 15 | +#include <linux/of_address.h> |
|---|
| 16 | +#include <linux/of_graph.h> |
|---|
| 17 | +#include <linux/platform_device.h> |
|---|
| 18 | +#include <linux/pm_runtime.h> |
|---|
| 26 | 19 | #include <linux/regmap.h> |
|---|
| 20 | + |
|---|
| 21 | +#include <video/of_videomode.h> |
|---|
| 22 | +#include <video/videomode.h> |
|---|
| 23 | + |
|---|
| 24 | +#include <drm/drm_bridge.h> |
|---|
| 25 | +#include <drm/drm_encoder.h> |
|---|
| 26 | +#include <drm/drm_print.h> |
|---|
| 27 | 27 | |
|---|
| 28 | 28 | #include "exynos_drm_drv.h" |
|---|
| 29 | 29 | |
|---|
| .. | .. |
|---|
| 88 | 88 | |
|---|
| 89 | 89 | #define MIC_BS_SIZE_2D(x) ((x) & 0x3fff) |
|---|
| 90 | 90 | |
|---|
| 91 | | -static char *clk_names[] = { "pclk_mic0", "sclk_rgb_vclk_to_mic0" }; |
|---|
| 91 | +static const char *const clk_names[] = { "pclk_mic0", "sclk_rgb_vclk_to_mic0" }; |
|---|
| 92 | 92 | #define NUM_CLKS ARRAY_SIZE(clk_names) |
|---|
| 93 | 93 | static DEFINE_MUTEX(mic_mutex); |
|---|
| 94 | 94 | |
|---|
| .. | .. |
|---|
| 113 | 113 | |
|---|
| 114 | 114 | ret = regmap_read(mic->sysreg, DSD_CFG_MUX, &val); |
|---|
| 115 | 115 | if (ret) { |
|---|
| 116 | | - DRM_ERROR("mic: Failed to read system register\n"); |
|---|
| 116 | + DRM_DEV_ERROR(mic->dev, |
|---|
| 117 | + "mic: Failed to read system register\n"); |
|---|
| 117 | 118 | return; |
|---|
| 118 | 119 | } |
|---|
| 119 | 120 | |
|---|
| .. | .. |
|---|
| 129 | 130 | |
|---|
| 130 | 131 | ret = regmap_write(mic->sysreg, DSD_CFG_MUX, val); |
|---|
| 131 | 132 | if (ret) |
|---|
| 132 | | - DRM_ERROR("mic: Failed to read system register\n"); |
|---|
| 133 | + DRM_DEV_ERROR(mic->dev, |
|---|
| 134 | + "mic: Failed to read system register\n"); |
|---|
| 133 | 135 | } |
|---|
| 134 | 136 | |
|---|
| 135 | 137 | static int mic_sw_reset(struct exynos_mic *mic) |
|---|
| .. | .. |
|---|
| 190 | 192 | struct videomode vm = mic->vm; |
|---|
| 191 | 193 | u32 reg, bs_size_2d; |
|---|
| 192 | 194 | |
|---|
| 193 | | - DRM_DEBUG("w: %u, h: %u\n", vm.hactive, vm.vactive); |
|---|
| 195 | + DRM_DEV_DEBUG(mic->dev, "w: %u, h: %u\n", vm.hactive, vm.vactive); |
|---|
| 194 | 196 | bs_size_2d = ((vm.hactive >> 2) << 1) + (vm.vactive % 4); |
|---|
| 195 | 197 | reg = MIC_BS_SIZE_2D(bs_size_2d); |
|---|
| 196 | 198 | writel(reg, mic->reg + MIC_2D_OUTPUT_TIMING_2); |
|---|
| .. | .. |
|---|
| 246 | 248 | } |
|---|
| 247 | 249 | |
|---|
| 248 | 250 | static void mic_mode_set(struct drm_bridge *bridge, |
|---|
| 249 | | - struct drm_display_mode *mode, |
|---|
| 250 | | - struct drm_display_mode *adjusted_mode) |
|---|
| 251 | + const struct drm_display_mode *mode, |
|---|
| 252 | + const struct drm_display_mode *adjusted_mode) |
|---|
| 251 | 253 | { |
|---|
| 252 | 254 | struct exynos_mic *mic = bridge->driver_private; |
|---|
| 253 | 255 | |
|---|
| .. | .. |
|---|
| 276 | 278 | |
|---|
| 277 | 279 | ret = mic_sw_reset(mic); |
|---|
| 278 | 280 | if (ret) { |
|---|
| 279 | | - DRM_ERROR("Failed to reset\n"); |
|---|
| 281 | + DRM_DEV_ERROR(mic->dev, "Failed to reset\n"); |
|---|
| 280 | 282 | goto turn_off; |
|---|
| 281 | 283 | } |
|---|
| 282 | 284 | |
|---|
| .. | .. |
|---|
| 356 | 358 | for (i = 0; i < NUM_CLKS; i++) { |
|---|
| 357 | 359 | ret = clk_prepare_enable(mic->clks[i]); |
|---|
| 358 | 360 | if (ret < 0) { |
|---|
| 359 | | - DRM_ERROR("Failed to enable clock (%s)\n", |
|---|
| 360 | | - clk_names[i]); |
|---|
| 361 | + DRM_DEV_ERROR(dev, "Failed to enable clock (%s)\n", |
|---|
| 362 | + clk_names[i]); |
|---|
| 361 | 363 | while (--i > -1) |
|---|
| 362 | 364 | clk_disable_unprepare(mic->clks[i]); |
|---|
| 363 | 365 | return ret; |
|---|
| .. | .. |
|---|
| 382 | 384 | |
|---|
| 383 | 385 | mic = devm_kzalloc(dev, sizeof(*mic), GFP_KERNEL); |
|---|
| 384 | 386 | if (!mic) { |
|---|
| 385 | | - DRM_ERROR("mic: Failed to allocate memory for MIC object\n"); |
|---|
| 387 | + DRM_DEV_ERROR(dev, |
|---|
| 388 | + "mic: Failed to allocate memory for MIC object\n"); |
|---|
| 386 | 389 | ret = -ENOMEM; |
|---|
| 387 | 390 | goto err; |
|---|
| 388 | 391 | } |
|---|
| .. | .. |
|---|
| 391 | 394 | |
|---|
| 392 | 395 | ret = of_address_to_resource(dev->of_node, 0, &res); |
|---|
| 393 | 396 | if (ret) { |
|---|
| 394 | | - DRM_ERROR("mic: Failed to get mem region for MIC\n"); |
|---|
| 397 | + DRM_DEV_ERROR(dev, "mic: Failed to get mem region for MIC\n"); |
|---|
| 395 | 398 | goto err; |
|---|
| 396 | 399 | } |
|---|
| 397 | 400 | mic->reg = devm_ioremap(dev, res.start, resource_size(&res)); |
|---|
| 398 | 401 | if (!mic->reg) { |
|---|
| 399 | | - DRM_ERROR("mic: Failed to remap for MIC\n"); |
|---|
| 402 | + DRM_DEV_ERROR(dev, "mic: Failed to remap for MIC\n"); |
|---|
| 400 | 403 | ret = -ENOMEM; |
|---|
| 401 | 404 | goto err; |
|---|
| 402 | 405 | } |
|---|
| .. | .. |
|---|
| 404 | 407 | mic->sysreg = syscon_regmap_lookup_by_phandle(dev->of_node, |
|---|
| 405 | 408 | "samsung,disp-syscon"); |
|---|
| 406 | 409 | if (IS_ERR(mic->sysreg)) { |
|---|
| 407 | | - DRM_ERROR("mic: Failed to get system register.\n"); |
|---|
| 410 | + DRM_DEV_ERROR(dev, "mic: Failed to get system register.\n"); |
|---|
| 408 | 411 | ret = PTR_ERR(mic->sysreg); |
|---|
| 409 | 412 | goto err; |
|---|
| 410 | 413 | } |
|---|
| .. | .. |
|---|
| 412 | 415 | for (i = 0; i < NUM_CLKS; i++) { |
|---|
| 413 | 416 | mic->clks[i] = devm_clk_get(dev, clk_names[i]); |
|---|
| 414 | 417 | if (IS_ERR(mic->clks[i])) { |
|---|
| 415 | | - DRM_ERROR("mic: Failed to get clock (%s)\n", |
|---|
| 416 | | - clk_names[i]); |
|---|
| 418 | + DRM_DEV_ERROR(dev, "mic: Failed to get clock (%s)\n", |
|---|
| 419 | + clk_names[i]); |
|---|
| 417 | 420 | ret = PTR_ERR(mic->clks[i]); |
|---|
| 418 | 421 | goto err; |
|---|
| 419 | 422 | } |
|---|
| .. | .. |
|---|
| 432 | 435 | if (ret) |
|---|
| 433 | 436 | goto err_pm; |
|---|
| 434 | 437 | |
|---|
| 435 | | - DRM_DEBUG_KMS("MIC has been probed\n"); |
|---|
| 438 | + DRM_DEV_DEBUG_KMS(dev, "MIC has been probed\n"); |
|---|
| 436 | 439 | |
|---|
| 437 | 440 | return 0; |
|---|
| 438 | 441 | |
|---|