// SPDX-License-Identifier: GPL-2.0-only /* * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved. * * Parts of this file were based on sources as follows: * * Copyright (c) 2006-2008 Intel Corporation * Copyright (c) 2007 Dave Airlie <airlied@linux.ie> * Copyright (C) 2011 Texas Instruments
*/
/** * DOC: ARM PrimeCell PL110 and PL111 CLCD Driver * * The PL110/PL111 is a simple LCD controller that can support TFT * and STN displays. This driver exposes a standard KMS interface * for them. * * The driver currently doesn't expose the cursor. The DRM API for * cursors requires support for 64x64 ARGB8888 cursor images, while * the hardware can only support 64x64 monochrome with masking * cursors. While one could imagine trying to hack something together * to look at the ARGB8888 and program reasonable in monochrome, we * just don't expose the cursor at all instead, and leave cursor * support to the application software cursor layer. * * TODO: * * - Fix race between setting plane base address and getting IRQ for * vsync firing the pageflip completion. * * - Read back hardware state at boot to skip reprogramming the * hardware when doing a no-op modeset. * * - Use the CLKSEL bit to support switching between the two external * clock parents.
*/
ret = drm_of_find_panel_or_bridge(dev->dev->of_node,
0, i,
&tmp_panel,
&tmp_bridge); if (ret) { if (ret == -EPROBE_DEFER) { /* * Something deferred, but that is often just * another way of saying -ENODEV, but let's * cast a vote for later deferral.
*/
defer = true;
} elseif (ret != -ENODEV) { /* Continue, maybe something else is working */
dev_err(dev->dev, "endpoint %d returns %d\n", i, ret);
}
}
if (tmp_panel) {
dev_info(dev->dev, "found panel on endpoint %d\n", i);
panel = tmp_panel;
} if (tmp_bridge) {
dev_info(dev->dev, "found bridge on endpoint %d\n", i);
bridge = tmp_bridge;
}
i++;
}
/* * If we can't find neither panel nor bridge on any of the * endpoints, and any of them retured -EPROBE_DEFER, then * let's defer this driver too.
*/ if ((!panel && !bridge) && defer) return -EPROBE_DEFER;
if (panel) {
bridge = drm_panel_bridge_add_typed(panel,
DRM_MODE_CONNECTOR_Unknown); if (IS_ERR(bridge)) {
ret = PTR_ERR(bridge); goto finish;
}
} elseif (bridge) {
dev_info(dev->dev, "Using non-panel bridge\n");
} else {
dev_err(dev->dev, "No bridge, exiting\n"); return -ENODEV;
}
/* * When using device-specific reserved memory we can't import * DMA buffers: those are passed by reference in any global * memory and we can only handle a specific range of memory.
*/ if (priv->use_device_memory) return ERR_PTR(-EINVAL);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.