mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
Merge tag 'topic/drm-misc-2015-12-18' of git://anongit.freedesktop.org/drm-intel into drm-next
Seems I lied in my last drm-misc pull request and suddenly there's a big pile of random stuff. Boris dug out Thierry's drm-trivial branch and resubmitted everything since that branch didn't really work out. On top of that Nicolas' changes to drm_dev_set_unique - this might conflict with new driver pulls (I double checked and current drm-next should be fine), so please beware. The -next/-fixes conflict in vmwgfx will change slightly with this here too. * tag 'topic/drm-misc-2015-12-18' of git://anongit.freedesktop.org/drm-intel: (36 commits) drm: use dev_name as default unique name in drm_dev_alloc() drm: make drm_dev_set_unique() not use a format string drm/vmwgfx: Constify function pointer structs drm/udl: Constify function pointer structs drm/tegra: Constify function pointer structs drm/rockchip: Constify function pointer structs drm/nouveau: Constify function pointer structs drm/mgag200: Constify function pointer structs drm/imx: Constify function pointer structs drm/i2c/sil164: Constify function pointer structs drm/i2c/adv7511: Constify function pointer structs drm/exynos: Constify function pointer structs drm/cirrus: Constify function pointer structs drm/i2c/ch7006: Constify function pointer structs drm/bridge/nxp-ptn3460: Constify function pointer structs drm/bridge/dw_hdmi: Constify function pointer structs drm/bochs: Constify function pointer structs drm/atmel-hlcdc: Constify function pointer structs drm/armada: Constify function pointer structs drm: Constify drm_encoder_slave_funcs ...
This commit is contained in:
commit
45ad5ccfa9
@ -986,10 +986,7 @@ int max_width, max_height;</synopsis>
|
||||
!Idrivers/gpu/drm/drm_atomic.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Frame Buffer Creation</title>
|
||||
<synopsis>struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
struct drm_mode_fb_cmd2 *mode_cmd);</synopsis>
|
||||
<title>Frame Buffer Abstraction</title>
|
||||
<para>
|
||||
Frame buffers are abstract memory objects that provide a source of
|
||||
pixels to scanout to a CRTC. Applications explicitly request the
|
||||
@ -1007,73 +1004,6 @@ int max_width, max_height;</synopsis>
|
||||
handles, e.g. vmwgfx directly exposes special TTM handles to userspace
|
||||
and so expects TTM handles in the create ioctl and not GEM handles.
|
||||
</para>
|
||||
<para>
|
||||
Drivers must first validate the requested frame buffer parameters passed
|
||||
through the mode_cmd argument. In particular this is where invalid
|
||||
sizes, pixel formats or pitches can be caught.
|
||||
</para>
|
||||
<para>
|
||||
If the parameters are deemed valid, drivers then create, initialize and
|
||||
return an instance of struct <structname>drm_framebuffer</structname>.
|
||||
If desired the instance can be embedded in a larger driver-specific
|
||||
structure. Drivers must fill its <structfield>width</structfield>,
|
||||
<structfield>height</structfield>, <structfield>pitches</structfield>,
|
||||
<structfield>offsets</structfield>, <structfield>depth</structfield>,
|
||||
<structfield>bits_per_pixel</structfield> and
|
||||
<structfield>pixel_format</structfield> fields from the values passed
|
||||
through the <parameter>drm_mode_fb_cmd2</parameter> argument. They
|
||||
should call the <function>drm_helper_mode_fill_fb_struct</function>
|
||||
helper function to do so.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The initialization of the new framebuffer instance is finalized with a
|
||||
call to <function>drm_framebuffer_init</function> which takes a pointer
|
||||
to DRM frame buffer operations (struct
|
||||
<structname>drm_framebuffer_funcs</structname>). Note that this function
|
||||
publishes the framebuffer and so from this point on it can be accessed
|
||||
concurrently from other threads. Hence it must be the last step in the
|
||||
driver's framebuffer initialization sequence. Frame buffer operations
|
||||
are
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<synopsis>int (*create_handle)(struct drm_framebuffer *fb,
|
||||
struct drm_file *file_priv, unsigned int *handle);</synopsis>
|
||||
<para>
|
||||
Create a handle to the frame buffer underlying memory object. If
|
||||
the frame buffer uses a multi-plane format, the handle will
|
||||
reference the memory object associated with the first plane.
|
||||
</para>
|
||||
<para>
|
||||
Drivers call <function>drm_gem_handle_create</function> to create
|
||||
the handle.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>void (*destroy)(struct drm_framebuffer *framebuffer);</synopsis>
|
||||
<para>
|
||||
Destroy the frame buffer object and frees all associated
|
||||
resources. Drivers must call
|
||||
<function>drm_framebuffer_cleanup</function> to free resources
|
||||
allocated by the DRM core for the frame buffer object, and must
|
||||
make sure to unreference all memory objects associated with the
|
||||
frame buffer. Handles created by the
|
||||
<methodname>create_handle</methodname> operation are released by
|
||||
the DRM core.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>int (*dirty)(struct drm_framebuffer *framebuffer,
|
||||
struct drm_file *file_priv, unsigned flags, unsigned color,
|
||||
struct drm_clip_rect *clips, unsigned num_clips);</synopsis>
|
||||
<para>
|
||||
This optional operation notifies the driver that a region of the
|
||||
frame buffer has changed in response to a DRM_IOCTL_MODE_DIRTYFB
|
||||
ioctl call.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>
|
||||
The lifetime of a drm framebuffer is controlled with a reference count,
|
||||
drivers can grab additional references with
|
||||
@ -3570,92 +3500,6 @@ int num_ioctls;</synopsis>
|
||||
<sect2>
|
||||
<title>DPIO</title>
|
||||
!Pdrivers/gpu/drm/i915/i915_reg.h DPIO
|
||||
<table id="dpiox2">
|
||||
<title>Dual channel PHY (VLV/CHV/BXT)</title>
|
||||
<tgroup cols="8">
|
||||
<colspec colname="c0" />
|
||||
<colspec colname="c1" />
|
||||
<colspec colname="c2" />
|
||||
<colspec colname="c3" />
|
||||
<colspec colname="c4" />
|
||||
<colspec colname="c5" />
|
||||
<colspec colname="c6" />
|
||||
<colspec colname="c7" />
|
||||
<spanspec spanname="ch0" namest="c0" nameend="c3" />
|
||||
<spanspec spanname="ch1" namest="c4" nameend="c7" />
|
||||
<spanspec spanname="ch0pcs01" namest="c0" nameend="c1" />
|
||||
<spanspec spanname="ch0pcs23" namest="c2" nameend="c3" />
|
||||
<spanspec spanname="ch1pcs01" namest="c4" nameend="c5" />
|
||||
<spanspec spanname="ch1pcs23" namest="c6" nameend="c7" />
|
||||
<thead>
|
||||
<row>
|
||||
<entry spanname="ch0">CH0</entry>
|
||||
<entry spanname="ch1">CH1</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top" align="center">
|
||||
<row>
|
||||
<entry spanname="ch0">CMN/PLL/REF</entry>
|
||||
<entry spanname="ch1">CMN/PLL/REF</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="ch0pcs01">PCS01</entry>
|
||||
<entry spanname="ch0pcs23">PCS23</entry>
|
||||
<entry spanname="ch1pcs01">PCS01</entry>
|
||||
<entry spanname="ch1pcs23">PCS23</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>TX0</entry>
|
||||
<entry>TX1</entry>
|
||||
<entry>TX2</entry>
|
||||
<entry>TX3</entry>
|
||||
<entry>TX0</entry>
|
||||
<entry>TX1</entry>
|
||||
<entry>TX2</entry>
|
||||
<entry>TX3</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="ch0">DDI0</entry>
|
||||
<entry spanname="ch1">DDI1</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
<table id="dpiox1">
|
||||
<title>Single channel PHY (CHV/BXT)</title>
|
||||
<tgroup cols="4">
|
||||
<colspec colname="c0" />
|
||||
<colspec colname="c1" />
|
||||
<colspec colname="c2" />
|
||||
<colspec colname="c3" />
|
||||
<spanspec spanname="ch0" namest="c0" nameend="c3" />
|
||||
<spanspec spanname="ch0pcs01" namest="c0" nameend="c1" />
|
||||
<spanspec spanname="ch0pcs23" namest="c2" nameend="c3" />
|
||||
<thead>
|
||||
<row>
|
||||
<entry spanname="ch0">CH0</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top" align="center">
|
||||
<row>
|
||||
<entry spanname="ch0">CMN/PLL/REF</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="ch0pcs01">PCS01</entry>
|
||||
<entry spanname="ch0pcs23">PCS23</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>TX0</entry>
|
||||
<entry>TX1</entry>
|
||||
<entry>TX2</entry>
|
||||
<entry>TX3</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="ch0">DDI2</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
|
@ -1074,7 +1074,7 @@ armada_drm_crtc_set_property(struct drm_crtc *crtc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct drm_crtc_funcs armada_crtc_funcs = {
|
||||
static const struct drm_crtc_funcs armada_crtc_funcs = {
|
||||
.cursor_set = armada_drm_crtc_cursor_set,
|
||||
.cursor_move = armada_drm_crtc_cursor_move,
|
||||
.destroy = armada_drm_crtc_destroy,
|
||||
|
@ -332,6 +332,10 @@ static const struct of_device_id atmel_hlcdc_of_match[] = {
|
||||
.compatible = "atmel,at91sam9x5-hlcdc",
|
||||
.data = &atmel_hlcdc_dc_at91sam9x5,
|
||||
},
|
||||
{
|
||||
.compatible = "atmel,sama5d2-hlcdc",
|
||||
.data = &atmel_hlcdc_dc_sama5d4,
|
||||
},
|
||||
{
|
||||
.compatible = "atmel,sama5d3-hlcdc",
|
||||
.data = &atmel_hlcdc_dc_sama5d3,
|
||||
@ -342,6 +346,7 @@ static const struct of_device_id atmel_hlcdc_of_match[] = {
|
||||
},
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, atmel_hlcdc_of_match);
|
||||
|
||||
int atmel_hlcdc_dc_mode_valid(struct atmel_hlcdc_dc *dc,
|
||||
struct drm_display_mode *mode)
|
||||
@ -733,10 +738,6 @@ static int atmel_hlcdc_dc_drm_probe(struct platform_device *pdev)
|
||||
if (!ddev)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = drm_dev_set_unique(ddev, dev_name(ddev->dev));
|
||||
if (ret)
|
||||
goto err_unref;
|
||||
|
||||
ret = atmel_hlcdc_dc_load(ddev);
|
||||
if (ret)
|
||||
goto err_unref;
|
||||
|
@ -146,7 +146,7 @@ atmel_hlcdc_rgb_encoder_mode_set(struct drm_encoder *encoder,
|
||||
cfg);
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs atmel_hlcdc_panel_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs atmel_hlcdc_panel_encoder_helper_funcs = {
|
||||
.mode_fixup = atmel_hlcdc_panel_encoder_mode_fixup,
|
||||
.mode_set = atmel_hlcdc_rgb_encoder_mode_set,
|
||||
.disable = atmel_hlcdc_panel_encoder_disable,
|
||||
@ -192,7 +192,7 @@ atmel_hlcdc_rgb_best_encoder(struct drm_connector *connector)
|
||||
return &rgb->encoder;
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs atmel_hlcdc_panel_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs atmel_hlcdc_panel_connector_helper_funcs = {
|
||||
.get_modes = atmel_hlcdc_panel_get_modes,
|
||||
.mode_valid = atmel_hlcdc_rgb_mode_valid,
|
||||
.best_encoder = atmel_hlcdc_rgb_best_encoder,
|
||||
|
@ -119,7 +119,7 @@ static int bochs_crtc_page_flip(struct drm_crtc *crtc,
|
||||
bochs_crtc_mode_set_base(crtc, 0, 0, old_fb);
|
||||
if (event) {
|
||||
spin_lock_irqsave(&bochs->dev->event_lock, irqflags);
|
||||
drm_send_vblank_event(bochs->dev, -1, event);
|
||||
drm_crtc_send_vblank_event(crtc, event);
|
||||
spin_unlock_irqrestore(&bochs->dev->event_lock, irqflags);
|
||||
}
|
||||
return 0;
|
||||
@ -245,13 +245,13 @@ static enum drm_connector_status bochs_connector_detect(struct drm_connector
|
||||
return connector_status_connected;
|
||||
}
|
||||
|
||||
struct drm_connector_helper_funcs bochs_connector_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs bochs_connector_connector_helper_funcs = {
|
||||
.get_modes = bochs_connector_get_modes,
|
||||
.mode_valid = bochs_connector_mode_valid,
|
||||
.best_encoder = bochs_connector_best_encoder,
|
||||
};
|
||||
|
||||
struct drm_connector_funcs bochs_connector_connector_funcs = {
|
||||
static const struct drm_connector_funcs bochs_connector_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.detect = bochs_connector_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
@ -283,7 +283,7 @@ int bochs_kms_init(struct bochs_device *bochs)
|
||||
bochs->dev->mode_config.preferred_depth = 24;
|
||||
bochs->dev->mode_config.prefer_shadow = 0;
|
||||
|
||||
bochs->dev->mode_config.funcs = (void *)&bochs_mode_funcs;
|
||||
bochs->dev->mode_config.funcs = &bochs_mode_funcs;
|
||||
|
||||
bochs_crtc_init(bochs->dev);
|
||||
bochs_encoder_init(bochs->dev);
|
||||
|
@ -1514,7 +1514,7 @@ static void dw_hdmi_connector_force(struct drm_connector *connector)
|
||||
mutex_unlock(&hdmi->mutex);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs dw_hdmi_connector_funcs = {
|
||||
static const struct drm_connector_funcs dw_hdmi_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = dw_hdmi_connector_detect,
|
||||
@ -1522,13 +1522,13 @@ static struct drm_connector_funcs dw_hdmi_connector_funcs = {
|
||||
.force = dw_hdmi_connector_force,
|
||||
};
|
||||
|
||||
static struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = {
|
||||
.get_modes = dw_hdmi_connector_get_modes,
|
||||
.mode_valid = dw_hdmi_connector_mode_valid,
|
||||
.best_encoder = dw_hdmi_connector_best_encoder,
|
||||
};
|
||||
|
||||
static struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
|
||||
static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
|
||||
.enable = dw_hdmi_bridge_enable,
|
||||
.disable = dw_hdmi_bridge_disable,
|
||||
.pre_enable = dw_hdmi_bridge_nop,
|
||||
|
@ -242,7 +242,7 @@ static struct drm_encoder *ptn3460_best_encoder(struct drm_connector *connector)
|
||||
return ptn_bridge->bridge.encoder;
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs ptn3460_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs ptn3460_connector_helper_funcs = {
|
||||
.get_modes = ptn3460_get_modes,
|
||||
.best_encoder = ptn3460_best_encoder,
|
||||
};
|
||||
@ -258,7 +258,7 @@ static void ptn3460_connector_destroy(struct drm_connector *connector)
|
||||
drm_connector_cleanup(connector);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs ptn3460_connector_funcs = {
|
||||
static const struct drm_connector_funcs ptn3460_connector_funcs = {
|
||||
.dpms = drm_atomic_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = ptn3460_detect,
|
||||
@ -299,7 +299,7 @@ static int ptn3460_bridge_attach(struct drm_bridge *bridge)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct drm_bridge_funcs ptn3460_bridge_funcs = {
|
||||
static const struct drm_bridge_funcs ptn3460_bridge_funcs = {
|
||||
.pre_enable = ptn3460_pre_enable,
|
||||
.enable = ptn3460_enable,
|
||||
.disable = ptn3460_disable,
|
||||
|
@ -533,12 +533,12 @@ static void cirrus_connector_destroy(struct drm_connector *connector)
|
||||
kfree(connector);
|
||||
}
|
||||
|
||||
struct drm_connector_helper_funcs cirrus_vga_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs cirrus_vga_connector_helper_funcs = {
|
||||
.get_modes = cirrus_vga_get_modes,
|
||||
.best_encoder = cirrus_connector_best_encoder,
|
||||
};
|
||||
|
||||
struct drm_connector_funcs cirrus_vga_connector_funcs = {
|
||||
static const struct drm_connector_funcs cirrus_vga_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.detect = cirrus_vga_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
|
@ -88,8 +88,7 @@ drm_atomic_helper_plane_changed(struct drm_atomic_state *state,
|
||||
|
||||
static bool
|
||||
check_pending_encoder_assignment(struct drm_atomic_state *state,
|
||||
struct drm_encoder *new_encoder,
|
||||
struct drm_connector *new_connector)
|
||||
struct drm_encoder *new_encoder)
|
||||
{
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *conn_state;
|
||||
@ -257,7 +256,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!check_pending_encoder_assignment(state, new_encoder, connector)) {
|
||||
if (!check_pending_encoder_assignment(state, new_encoder)) {
|
||||
DRM_DEBUG_ATOMIC("Encoder for [CONNECTOR:%d:%s] already assigned\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
|
@ -1673,6 +1673,7 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr)
|
||||
if (mgr->proposed_vcpis[i]) {
|
||||
port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi);
|
||||
req_payload.num_slots = mgr->proposed_vcpis[i]->num_slots;
|
||||
req_payload.vcpi = mgr->proposed_vcpis[i]->vcpi;
|
||||
} else {
|
||||
port = NULL;
|
||||
req_payload.num_slots = 0;
|
||||
@ -1688,6 +1689,7 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr)
|
||||
if (req_payload.num_slots) {
|
||||
drm_dp_create_payload_step1(mgr, mgr->proposed_vcpis[i]->vcpi, &req_payload);
|
||||
mgr->payloads[i].num_slots = req_payload.num_slots;
|
||||
mgr->payloads[i].vcpi = req_payload.vcpi;
|
||||
} else if (mgr->payloads[i].num_slots) {
|
||||
mgr->payloads[i].num_slots = 0;
|
||||
drm_dp_destroy_payload_step1(mgr, port, port->vcpi.vcpi, &mgr->payloads[i]);
|
||||
@ -1823,7 +1825,7 @@ static int drm_dp_encode_up_ack_reply(struct drm_dp_sideband_msg_tx *msg, u8 req
|
||||
{
|
||||
struct drm_dp_sideband_msg_reply_body reply;
|
||||
|
||||
reply.reply_type = 1;
|
||||
reply.reply_type = 0;
|
||||
reply.req_type = req_type;
|
||||
drm_dp_encode_sideband_reply(&reply, msg);
|
||||
return 0;
|
||||
|
@ -633,8 +633,17 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
ret = drm_dev_set_unique(dev, dev_name(parent));
|
||||
if (ret)
|
||||
goto err_setunique;
|
||||
}
|
||||
|
||||
return dev;
|
||||
|
||||
err_setunique:
|
||||
if (drm_core_check_feature(dev, DRIVER_GEM))
|
||||
drm_gem_destroy(dev);
|
||||
err_ctxbitmap:
|
||||
drm_legacy_ctxbitmap_cleanup(dev);
|
||||
drm_ht_remove(&dev->map_hash);
|
||||
@ -797,23 +806,18 @@ EXPORT_SYMBOL(drm_dev_unregister);
|
||||
/**
|
||||
* drm_dev_set_unique - Set the unique name of a DRM device
|
||||
* @dev: device of which to set the unique name
|
||||
* @fmt: format string for unique name
|
||||
* @name: unique name
|
||||
*
|
||||
* Sets the unique name of a DRM device using the specified format string and
|
||||
* a variable list of arguments. Drivers can use this at driver probe time if
|
||||
* the unique name of the devices they drive is static.
|
||||
* Sets the unique name of a DRM device using the specified string. Drivers
|
||||
* can use this at driver probe time if the unique name of the devices they
|
||||
* drive is static.
|
||||
*
|
||||
* Return: 0 on success or a negative error code on failure.
|
||||
*/
|
||||
int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...)
|
||||
int drm_dev_set_unique(struct drm_device *dev, const char *name)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
kfree(dev->unique);
|
||||
|
||||
va_start(ap, fmt);
|
||||
dev->unique = kvasprintf(GFP_KERNEL, fmt, ap);
|
||||
va_end(ap);
|
||||
dev->unique = kstrdup(name, GFP_KERNEL);
|
||||
|
||||
return dev->unique ? 0 : -ENOMEM;
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ EXPORT_SYMBOL(drm_i2c_encoder_destroy);
|
||||
* Wrapper fxns which can be plugged in to drm_encoder_helper_funcs:
|
||||
*/
|
||||
|
||||
static inline struct drm_encoder_slave_funcs *
|
||||
static inline const struct drm_encoder_slave_funcs *
|
||||
get_slave_funcs(struct drm_encoder *enc)
|
||||
{
|
||||
return to_encoder_slave(enc)->slave_funcs;
|
||||
|
@ -266,7 +266,7 @@ static int drm_fbdev_cma_create(struct drm_fb_helper *helper,
|
||||
fbi = drm_fb_helper_alloc_fbi(helper);
|
||||
if (IS_ERR(fbi)) {
|
||||
ret = PTR_ERR(fbi);
|
||||
goto err_drm_gem_cma_free_object;
|
||||
goto err_gem_free_object;
|
||||
}
|
||||
|
||||
fbdev_cma->fb = drm_fb_cma_alloc(dev, &mode_cmd, &obj, 1);
|
||||
@ -299,8 +299,8 @@ static int drm_fbdev_cma_create(struct drm_fb_helper *helper,
|
||||
|
||||
err_fb_info_destroy:
|
||||
drm_fb_helper_release_fbi(helper);
|
||||
err_drm_gem_cma_free_object:
|
||||
drm_gem_cma_free_object(&obj->base);
|
||||
err_gem_free_object:
|
||||
dev->driver->gem_free_object(&obj->base);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -121,7 +121,7 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
|
||||
return cma_obj;
|
||||
|
||||
error:
|
||||
drm_gem_cma_free_object(&cma_obj->base);
|
||||
drm->driver->gem_free_object(&cma_obj->base);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(drm_gem_cma_create);
|
||||
@ -171,7 +171,7 @@ drm_gem_cma_create_with_handle(struct drm_file *file_priv,
|
||||
return cma_obj;
|
||||
|
||||
err_handle_create:
|
||||
drm_gem_cma_free_object(gem_obj);
|
||||
drm->driver->gem_free_object(gem_obj);
|
||||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
@ -553,10 +553,10 @@ EXPORT_SYMBOL(drm_gtf_mode_complex);
|
||||
* drivers/video/fbmon.c
|
||||
*
|
||||
* Standard GTF parameters:
|
||||
* M = 600
|
||||
* C = 40
|
||||
* K = 128
|
||||
* J = 20
|
||||
* M = 600
|
||||
* C = 40
|
||||
* K = 128
|
||||
* J = 20
|
||||
*
|
||||
* Returns:
|
||||
* The modeline based on the GTF algorithm stored in a drm_display_mode object.
|
||||
@ -1244,7 +1244,7 @@ EXPORT_SYMBOL(drm_mode_connector_list_update);
|
||||
* This uses the same parameters as the fb modedb.c, except for an extra
|
||||
* force-enable, force-enable-digital and force-disable bit at the end:
|
||||
*
|
||||
* <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
|
||||
* <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
|
||||
*
|
||||
* The intermediate drm_cmdline_mode structure is required to store additional
|
||||
* options from the command line modline like the force-enable/disable flag.
|
||||
|
@ -40,17 +40,15 @@
|
||||
* The basic usage pattern is to:
|
||||
*
|
||||
* drm_modeset_acquire_init(&ctx)
|
||||
* retry:
|
||||
* retry:
|
||||
* foreach (lock in random_ordered_set_of_locks) {
|
||||
* ret = drm_modeset_lock(lock, &ctx)
|
||||
* if (ret == -EDEADLK) {
|
||||
* drm_modeset_backoff(&ctx);
|
||||
* goto retry;
|
||||
* }
|
||||
* ret = drm_modeset_lock(lock, &ctx)
|
||||
* if (ret == -EDEADLK) {
|
||||
* drm_modeset_backoff(&ctx);
|
||||
* goto retry;
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* ... do stuff ...
|
||||
*
|
||||
* drm_modeset_drop_locks(&ctx);
|
||||
* drm_modeset_acquire_fini(&ctx);
|
||||
*/
|
||||
|
@ -313,19 +313,15 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = {
|
||||
*
|
||||
* Export callbacks:
|
||||
*
|
||||
* - @gem_prime_pin (optional): prepare a GEM object for exporting
|
||||
*
|
||||
* - @gem_prime_get_sg_table: provide a scatter/gather table of pinned pages
|
||||
*
|
||||
* - @gem_prime_vmap: vmap a buffer exported by your driver
|
||||
*
|
||||
* - @gem_prime_vunmap: vunmap a buffer exported by your driver
|
||||
*
|
||||
* - @gem_prime_mmap (optional): mmap a buffer exported by your driver
|
||||
* * @gem_prime_pin (optional): prepare a GEM object for exporting
|
||||
* * @gem_prime_get_sg_table: provide a scatter/gather table of pinned pages
|
||||
* * @gem_prime_vmap: vmap a buffer exported by your driver
|
||||
* * @gem_prime_vunmap: vunmap a buffer exported by your driver
|
||||
* * @gem_prime_mmap (optional): mmap a buffer exported by your driver
|
||||
*
|
||||
* Import callback:
|
||||
*
|
||||
* - @gem_prime_import_sg_table (import): produce a GEM object from another
|
||||
* * @gem_prime_import_sg_table (import): produce a GEM object from another
|
||||
* driver's scatter/gather table
|
||||
*/
|
||||
|
||||
|
@ -953,7 +953,7 @@ static void exynos_dp_connector_destroy(struct drm_connector *connector)
|
||||
drm_connector_cleanup(connector);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs exynos_dp_connector_funcs = {
|
||||
static const struct drm_connector_funcs exynos_dp_connector_funcs = {
|
||||
.dpms = drm_atomic_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = exynos_dp_detect,
|
||||
@ -998,7 +998,7 @@ static struct drm_encoder *exynos_dp_best_encoder(
|
||||
return &dp->encoder;
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs exynos_dp_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs exynos_dp_connector_helper_funcs = {
|
||||
.get_modes = exynos_dp_get_modes,
|
||||
.best_encoder = exynos_dp_best_encoder,
|
||||
};
|
||||
@ -1176,14 +1176,14 @@ static void exynos_dp_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs exynos_dp_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs exynos_dp_encoder_helper_funcs = {
|
||||
.mode_fixup = exynos_dp_mode_fixup,
|
||||
.mode_set = exynos_dp_mode_set,
|
||||
.enable = exynos_dp_enable,
|
||||
.disable = exynos_dp_disable,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs exynos_dp_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs exynos_dp_encoder_funcs = {
|
||||
.destroy = drm_encoder_cleanup,
|
||||
};
|
||||
|
||||
|
@ -93,7 +93,7 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc,
|
||||
}
|
||||
}
|
||||
|
||||
static struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
|
||||
static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
|
||||
.enable = exynos_drm_crtc_enable,
|
||||
.disable = exynos_drm_crtc_disable,
|
||||
.mode_set_nofb = exynos_drm_crtc_mode_set_nofb,
|
||||
@ -113,7 +113,7 @@ static void exynos_drm_crtc_destroy(struct drm_crtc *crtc)
|
||||
kfree(exynos_crtc);
|
||||
}
|
||||
|
||||
static struct drm_crtc_funcs exynos_crtc_funcs = {
|
||||
static const struct drm_crtc_funcs exynos_crtc_funcs = {
|
||||
.set_config = drm_atomic_helper_set_config,
|
||||
.page_flip = drm_atomic_helper_page_flip,
|
||||
.destroy = exynos_drm_crtc_destroy,
|
||||
|
@ -57,7 +57,7 @@ static void exynos_dpi_connector_destroy(struct drm_connector *connector)
|
||||
drm_connector_cleanup(connector);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs exynos_dpi_connector_funcs = {
|
||||
static const struct drm_connector_funcs exynos_dpi_connector_funcs = {
|
||||
.dpms = drm_atomic_helper_connector_dpms,
|
||||
.detect = exynos_dpi_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
@ -100,7 +100,7 @@ exynos_dpi_best_encoder(struct drm_connector *connector)
|
||||
return &ctx->encoder;
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = {
|
||||
.get_modes = exynos_dpi_get_modes,
|
||||
.best_encoder = exynos_dpi_best_encoder,
|
||||
};
|
||||
@ -161,14 +161,14 @@ static void exynos_dpi_disable(struct drm_encoder *encoder)
|
||||
}
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs exynos_dpi_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs exynos_dpi_encoder_helper_funcs = {
|
||||
.mode_fixup = exynos_dpi_mode_fixup,
|
||||
.mode_set = exynos_dpi_mode_set,
|
||||
.enable = exynos_dpi_enable,
|
||||
.disable = exynos_dpi_disable,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs exynos_dpi_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs exynos_dpi_encoder_funcs = {
|
||||
.destroy = drm_encoder_cleanup,
|
||||
};
|
||||
|
||||
|
@ -1541,7 +1541,7 @@ static void exynos_dsi_connector_destroy(struct drm_connector *connector)
|
||||
connector->dev = NULL;
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs exynos_dsi_connector_funcs = {
|
||||
static const struct drm_connector_funcs exynos_dsi_connector_funcs = {
|
||||
.dpms = drm_atomic_helper_connector_dpms,
|
||||
.detect = exynos_dsi_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
@ -1569,7 +1569,7 @@ exynos_dsi_best_encoder(struct drm_connector *connector)
|
||||
return &dsi->encoder;
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
|
||||
.get_modes = exynos_dsi_get_modes,
|
||||
.best_encoder = exynos_dsi_best_encoder,
|
||||
};
|
||||
@ -1622,14 +1622,14 @@ static void exynos_dsi_mode_set(struct drm_encoder *encoder,
|
||||
vm->hsync_len = m->hsync_end - m->hsync_start;
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
|
||||
.mode_fixup = exynos_dsi_mode_fixup,
|
||||
.mode_set = exynos_dsi_mode_set,
|
||||
.enable = exynos_dsi_enable,
|
||||
.disable = exynos_dsi_disable,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs exynos_dsi_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs exynos_dsi_encoder_funcs = {
|
||||
.destroy = drm_encoder_cleanup,
|
||||
};
|
||||
|
||||
|
@ -110,7 +110,7 @@ static int exynos_drm_fb_dirty(struct drm_framebuffer *fb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct drm_framebuffer_funcs exynos_drm_fb_funcs = {
|
||||
static const struct drm_framebuffer_funcs exynos_drm_fb_funcs = {
|
||||
.destroy = exynos_drm_fb_destroy,
|
||||
.create_handle = exynos_drm_fb_create_handle,
|
||||
.dirty = exynos_drm_fb_dirty,
|
||||
|
@ -389,7 +389,7 @@ already_disabled:
|
||||
mutex_unlock(&mic_mutex);
|
||||
}
|
||||
|
||||
struct drm_bridge_funcs mic_bridge_funcs = {
|
||||
static const struct drm_bridge_funcs mic_bridge_funcs = {
|
||||
.disable = mic_disable,
|
||||
.post_disable = mic_post_disable,
|
||||
.pre_enable = mic_pre_enable,
|
||||
|
@ -339,7 +339,7 @@ static void vidi_connector_destroy(struct drm_connector *connector)
|
||||
{
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs vidi_connector_funcs = {
|
||||
static const struct drm_connector_funcs vidi_connector_funcs = {
|
||||
.dpms = drm_atomic_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = vidi_detect,
|
||||
@ -383,7 +383,7 @@ static struct drm_encoder *vidi_best_encoder(struct drm_connector *connector)
|
||||
return &ctx->encoder;
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs vidi_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = {
|
||||
.get_modes = vidi_get_modes,
|
||||
.best_encoder = vidi_best_encoder,
|
||||
};
|
||||
@ -431,14 +431,14 @@ static void exynos_vidi_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs exynos_vidi_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs exynos_vidi_encoder_helper_funcs = {
|
||||
.mode_fixup = exynos_vidi_mode_fixup,
|
||||
.mode_set = exynos_vidi_mode_set,
|
||||
.enable = exynos_vidi_enable,
|
||||
.disable = exynos_vidi_disable,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs exynos_vidi_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs exynos_vidi_encoder_funcs = {
|
||||
.destroy = drm_encoder_cleanup,
|
||||
};
|
||||
|
||||
|
@ -956,7 +956,7 @@ static void hdmi_connector_destroy(struct drm_connector *connector)
|
||||
drm_connector_cleanup(connector);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs hdmi_connector_funcs = {
|
||||
static const struct drm_connector_funcs hdmi_connector_funcs = {
|
||||
.dpms = drm_atomic_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = hdmi_detect,
|
||||
@ -1030,7 +1030,7 @@ static struct drm_encoder *hdmi_best_encoder(struct drm_connector *connector)
|
||||
return &hdata->encoder;
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs hdmi_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs hdmi_connector_helper_funcs = {
|
||||
.get_modes = hdmi_get_modes,
|
||||
.mode_valid = hdmi_mode_valid,
|
||||
.best_encoder = hdmi_best_encoder,
|
||||
@ -1641,14 +1641,14 @@ static void hdmi_disable(struct drm_encoder *encoder)
|
||||
hdata->powered = false;
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = {
|
||||
.mode_fixup = hdmi_mode_fixup,
|
||||
.mode_set = hdmi_mode_set,
|
||||
.enable = hdmi_enable,
|
||||
.disable = hdmi_disable,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs exynos_hdmi_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs exynos_hdmi_encoder_funcs = {
|
||||
.destroy = drm_encoder_cleanup,
|
||||
};
|
||||
|
||||
|
@ -363,7 +363,6 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
|
||||
fsl_dev->np = dev->of_node;
|
||||
drm->dev_private = fsl_dev;
|
||||
dev_set_drvdata(dev, fsl_dev);
|
||||
drm_dev_set_unique(drm, dev_name(dev));
|
||||
|
||||
ret = drm_dev_register(drm, 0);
|
||||
if (ret < 0)
|
||||
|
@ -821,14 +821,18 @@ void mdfld_dsi_dpi_mode_set(struct drm_encoder *encoder,
|
||||
struct drm_device *dev = dsi_config->dev;
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
int pipe = mdfld_dsi_encoder_get_pipe(dsi_encoder);
|
||||
|
||||
u32 pipeconf_reg = PIPEACONF;
|
||||
u32 dspcntr_reg = DSPACNTR;
|
||||
u32 pipeconf, dspcntr;
|
||||
|
||||
u32 pipeconf = dev_priv->pipeconf[pipe];
|
||||
u32 dspcntr = dev_priv->dspcntr[pipe];
|
||||
u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX;
|
||||
|
||||
if (WARN_ON(pipe < 0))
|
||||
return;
|
||||
|
||||
pipeconf = dev_priv->pipeconf[pipe];
|
||||
dspcntr = dev_priv->dspcntr[pipe];
|
||||
|
||||
if (pipe) {
|
||||
pipeconf_reg = PIPECCONF;
|
||||
dspcntr_reg = DSPCCNTR;
|
||||
|
@ -752,7 +752,7 @@ static void adv7511_encoder_mode_set(struct drm_encoder *encoder,
|
||||
adv7511->f_tmds = mode->clock;
|
||||
}
|
||||
|
||||
static struct drm_encoder_slave_funcs adv7511_encoder_funcs = {
|
||||
static const struct drm_encoder_slave_funcs adv7511_encoder_funcs = {
|
||||
.dpms = adv7511_encoder_dpms,
|
||||
.mode_valid = adv7511_encoder_mode_valid,
|
||||
.mode_set = adv7511_encoder_mode_set,
|
||||
|
@ -371,7 +371,7 @@ static int ch7006_encoder_set_property(struct drm_encoder *encoder,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct drm_encoder_slave_funcs ch7006_encoder_funcs = {
|
||||
static const struct drm_encoder_slave_funcs ch7006_encoder_funcs = {
|
||||
.set_config = ch7006_encoder_set_config,
|
||||
.destroy = ch7006_encoder_destroy,
|
||||
.dpms = ch7006_encoder_dpms,
|
||||
|
@ -341,7 +341,7 @@ sil164_encoder_destroy(struct drm_encoder *encoder)
|
||||
drm_i2c_encoder_destroy(encoder);
|
||||
}
|
||||
|
||||
static struct drm_encoder_slave_funcs sil164_encoder_funcs = {
|
||||
static const struct drm_encoder_slave_funcs sil164_encoder_funcs = {
|
||||
.set_config = sil164_encoder_set_config,
|
||||
.destroy = sil164_encoder_destroy,
|
||||
.dpms = sil164_encoder_dpms,
|
||||
|
@ -855,31 +855,31 @@ enum skl_disp_power_wells {
|
||||
*
|
||||
* Note: DDI0 is digital port B, DD1 is digital port C, and DDI2 is
|
||||
* digital port D (CHV) or port A (BXT).
|
||||
*/
|
||||
/*
|
||||
* Dual channel PHY (VLV/CHV/BXT)
|
||||
* ---------------------------------
|
||||
* | CH0 | CH1 |
|
||||
* | CMN/PLL/REF | CMN/PLL/REF |
|
||||
* |---------------|---------------| Display PHY
|
||||
* | PCS01 | PCS23 | PCS01 | PCS23 |
|
||||
* |-------|-------|-------|-------|
|
||||
* |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
|
||||
* ---------------------------------
|
||||
* | DDI0 | DDI1 | DP/HDMI ports
|
||||
* ---------------------------------
|
||||
*
|
||||
* Single channel PHY (CHV/BXT)
|
||||
* -----------------
|
||||
* | CH0 |
|
||||
* | CMN/PLL/REF |
|
||||
* |---------------| Display PHY
|
||||
* | PCS01 | PCS23 |
|
||||
* |-------|-------|
|
||||
* |TX0|TX1|TX2|TX3|
|
||||
* -----------------
|
||||
* | DDI2 | DP/HDMI port
|
||||
* -----------------
|
||||
*
|
||||
* Dual channel PHY (VLV/CHV/BXT)
|
||||
* ---------------------------------
|
||||
* | CH0 | CH1 |
|
||||
* | CMN/PLL/REF | CMN/PLL/REF |
|
||||
* |---------------|---------------| Display PHY
|
||||
* | PCS01 | PCS23 | PCS01 | PCS23 |
|
||||
* |-------|-------|-------|-------|
|
||||
* |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
|
||||
* ---------------------------------
|
||||
* | DDI0 | DDI1 | DP/HDMI ports
|
||||
* ---------------------------------
|
||||
*
|
||||
* Single channel PHY (CHV/BXT)
|
||||
* -----------------
|
||||
* | CH0 |
|
||||
* | CMN/PLL/REF |
|
||||
* |---------------| Display PHY
|
||||
* | PCS01 | PCS23 |
|
||||
* |-------|-------|
|
||||
* |TX0|TX1|TX2|TX3|
|
||||
* -----------------
|
||||
* | DDI2 | DP/HDMI port
|
||||
* -----------------
|
||||
*/
|
||||
#define DPIO_DEVFN 0
|
||||
|
||||
|
@ -137,7 +137,7 @@ static void dw_hdmi_imx_encoder_prepare(struct drm_encoder *encoder)
|
||||
imx_drm_set_bus_format(encoder, MEDIA_BUS_FMT_RGB888_1X24);
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs dw_hdmi_imx_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs dw_hdmi_imx_encoder_helper_funcs = {
|
||||
.mode_fixup = dw_hdmi_imx_encoder_mode_fixup,
|
||||
.mode_set = dw_hdmi_imx_encoder_mode_set,
|
||||
.prepare = dw_hdmi_imx_encoder_prepare,
|
||||
@ -145,7 +145,7 @@ static struct drm_encoder_helper_funcs dw_hdmi_imx_encoder_helper_funcs = {
|
||||
.disable = dw_hdmi_imx_encoder_disable,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs dw_hdmi_imx_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs dw_hdmi_imx_encoder_funcs = {
|
||||
.destroy = drm_encoder_cleanup,
|
||||
};
|
||||
|
||||
|
@ -39,13 +39,12 @@ struct imx_drm_component {
|
||||
struct imx_drm_device {
|
||||
struct drm_device *drm;
|
||||
struct imx_drm_crtc *crtc[MAX_CRTC];
|
||||
int pipes;
|
||||
unsigned int pipes;
|
||||
struct drm_fbdev_cma *fbhelper;
|
||||
};
|
||||
|
||||
struct imx_drm_crtc {
|
||||
struct drm_crtc *crtc;
|
||||
int pipe;
|
||||
struct imx_drm_crtc_helper_funcs imx_drm_helper_funcs;
|
||||
};
|
||||
|
||||
@ -54,9 +53,9 @@ static int legacyfb_depth = 16;
|
||||
module_param(legacyfb_depth, int, 0444);
|
||||
#endif
|
||||
|
||||
int imx_drm_crtc_id(struct imx_drm_crtc *crtc)
|
||||
unsigned int imx_drm_crtc_id(struct imx_drm_crtc *crtc)
|
||||
{
|
||||
return crtc->pipe;
|
||||
return drm_crtc_index(crtc->crtc);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(imx_drm_crtc_id);
|
||||
|
||||
@ -124,19 +123,19 @@ EXPORT_SYMBOL_GPL(imx_drm_set_bus_format);
|
||||
|
||||
int imx_drm_crtc_vblank_get(struct imx_drm_crtc *imx_drm_crtc)
|
||||
{
|
||||
return drm_vblank_get(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe);
|
||||
return drm_crtc_vblank_get(imx_drm_crtc->crtc);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_get);
|
||||
|
||||
void imx_drm_crtc_vblank_put(struct imx_drm_crtc *imx_drm_crtc)
|
||||
{
|
||||
drm_vblank_put(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe);
|
||||
drm_crtc_vblank_put(imx_drm_crtc->crtc);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_put);
|
||||
|
||||
void imx_drm_handle_vblank(struct imx_drm_crtc *imx_drm_crtc)
|
||||
{
|
||||
drm_handle_vblank(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe);
|
||||
drm_crtc_handle_vblank(imx_drm_crtc->crtc);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(imx_drm_handle_vblank);
|
||||
|
||||
@ -215,7 +214,7 @@ static void imx_drm_output_poll_changed(struct drm_device *drm)
|
||||
drm_fbdev_cma_hotplug_event(imxdrm->fbhelper);
|
||||
}
|
||||
|
||||
static struct drm_mode_config_funcs imx_drm_mode_config_funcs = {
|
||||
static const struct drm_mode_config_funcs imx_drm_mode_config_funcs = {
|
||||
.fb_create = drm_fb_cma_create,
|
||||
.output_poll_changed = imx_drm_output_poll_changed,
|
||||
};
|
||||
@ -356,12 +355,11 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
|
||||
return -ENOMEM;
|
||||
|
||||
imx_drm_crtc->imx_drm_helper_funcs = *imx_drm_helper_funcs;
|
||||
imx_drm_crtc->pipe = imxdrm->pipes++;
|
||||
imx_drm_crtc->crtc = crtc;
|
||||
|
||||
crtc->port = port;
|
||||
|
||||
imxdrm->crtc[imx_drm_crtc->pipe] = imx_drm_crtc;
|
||||
imxdrm->crtc[imxdrm->pipes++] = imx_drm_crtc;
|
||||
|
||||
*new_crtc = imx_drm_crtc;
|
||||
|
||||
@ -378,7 +376,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
|
||||
return 0;
|
||||
|
||||
err_register:
|
||||
imxdrm->crtc[imx_drm_crtc->pipe] = NULL;
|
||||
imxdrm->crtc[--imxdrm->pipes] = NULL;
|
||||
kfree(imx_drm_crtc);
|
||||
return ret;
|
||||
}
|
||||
@ -390,10 +388,11 @@ EXPORT_SYMBOL_GPL(imx_drm_add_crtc);
|
||||
int imx_drm_remove_crtc(struct imx_drm_crtc *imx_drm_crtc)
|
||||
{
|
||||
struct imx_drm_device *imxdrm = imx_drm_crtc->crtc->dev->dev_private;
|
||||
unsigned int pipe = drm_crtc_index(imx_drm_crtc->crtc);
|
||||
|
||||
drm_crtc_cleanup(imx_drm_crtc->crtc);
|
||||
|
||||
imxdrm->crtc[imx_drm_crtc->pipe] = NULL;
|
||||
imxdrm->crtc[pipe] = NULL;
|
||||
|
||||
kfree(imx_drm_crtc);
|
||||
|
||||
|
@ -13,7 +13,7 @@ struct drm_plane;
|
||||
struct imx_drm_crtc;
|
||||
struct platform_device;
|
||||
|
||||
int imx_drm_crtc_id(struct imx_drm_crtc *crtc);
|
||||
unsigned int imx_drm_crtc_id(struct imx_drm_crtc *crtc);
|
||||
|
||||
struct imx_drm_crtc_helper_funcs {
|
||||
int (*enable_vblank)(struct drm_crtc *crtc);
|
||||
|
@ -358,23 +358,23 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder)
|
||||
drm_panel_unprepare(imx_ldb_ch->panel);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs imx_ldb_connector_funcs = {
|
||||
static const struct drm_connector_funcs imx_ldb_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = imx_ldb_connector_detect,
|
||||
.destroy = imx_drm_connector_destroy,
|
||||
};
|
||||
|
||||
static struct drm_connector_helper_funcs imx_ldb_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs imx_ldb_connector_helper_funcs = {
|
||||
.get_modes = imx_ldb_connector_get_modes,
|
||||
.best_encoder = imx_ldb_connector_best_encoder,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs imx_ldb_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs imx_ldb_encoder_funcs = {
|
||||
.destroy = imx_drm_encoder_destroy,
|
||||
};
|
||||
|
||||
static struct drm_encoder_helper_funcs imx_ldb_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs imx_ldb_encoder_helper_funcs = {
|
||||
.dpms = imx_ldb_encoder_dpms,
|
||||
.mode_fixup = imx_ldb_encoder_mode_fixup,
|
||||
.prepare = imx_ldb_encoder_prepare,
|
||||
|
@ -360,24 +360,24 @@ static void imx_tve_encoder_disable(struct drm_encoder *encoder)
|
||||
tve_disable(tve);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs imx_tve_connector_funcs = {
|
||||
static const struct drm_connector_funcs imx_tve_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = imx_tve_connector_detect,
|
||||
.destroy = imx_drm_connector_destroy,
|
||||
};
|
||||
|
||||
static struct drm_connector_helper_funcs imx_tve_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs imx_tve_connector_helper_funcs = {
|
||||
.get_modes = imx_tve_connector_get_modes,
|
||||
.best_encoder = imx_tve_connector_best_encoder,
|
||||
.mode_valid = imx_tve_connector_mode_valid,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs imx_tve_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs imx_tve_encoder_funcs = {
|
||||
.destroy = imx_drm_encoder_destroy,
|
||||
};
|
||||
|
||||
static struct drm_encoder_helper_funcs imx_tve_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs imx_tve_encoder_helper_funcs = {
|
||||
.dpms = imx_tve_encoder_dpms,
|
||||
.mode_fixup = imx_tve_encoder_mode_fixup,
|
||||
.prepare = imx_tve_encoder_prepare,
|
||||
|
@ -270,7 +270,7 @@ static void ipu_crtc_commit(struct drm_crtc *crtc)
|
||||
ipu_fb_enable(ipu_crtc);
|
||||
}
|
||||
|
||||
static struct drm_crtc_helper_funcs ipu_helper_funcs = {
|
||||
static const struct drm_crtc_helper_funcs ipu_helper_funcs = {
|
||||
.dpms = ipu_crtc_dpms,
|
||||
.mode_fixup = ipu_crtc_mode_fixup,
|
||||
.mode_set = ipu_crtc_mode_set,
|
||||
|
@ -148,23 +148,23 @@ static void imx_pd_encoder_disable(struct drm_encoder *encoder)
|
||||
drm_panel_unprepare(imxpd->panel);
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs imx_pd_connector_funcs = {
|
||||
static const struct drm_connector_funcs imx_pd_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.detect = imx_pd_connector_detect,
|
||||
.destroy = imx_drm_connector_destroy,
|
||||
};
|
||||
|
||||
static struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = {
|
||||
.get_modes = imx_pd_connector_get_modes,
|
||||
.best_encoder = imx_pd_connector_best_encoder,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs imx_pd_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs imx_pd_encoder_funcs = {
|
||||
.destroy = imx_drm_encoder_destroy,
|
||||
};
|
||||
|
||||
static struct drm_encoder_helper_funcs imx_pd_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs imx_pd_encoder_helper_funcs = {
|
||||
.dpms = imx_pd_encoder_dpms,
|
||||
.mode_fixup = imx_pd_encoder_mode_fixup,
|
||||
.prepare = imx_pd_encoder_prepare,
|
||||
|
@ -1684,13 +1684,13 @@ static void mga_connector_destroy(struct drm_connector *connector)
|
||||
kfree(connector);
|
||||
}
|
||||
|
||||
struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
|
||||
.get_modes = mga_vga_get_modes,
|
||||
.mode_valid = mga_vga_mode_valid,
|
||||
.best_encoder = mga_connector_best_encoder,
|
||||
};
|
||||
|
||||
struct drm_connector_funcs mga_vga_connector_funcs = {
|
||||
static const struct drm_connector_funcs mga_vga_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.detect = mga_vga_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
|
@ -769,7 +769,7 @@ static void nv17_tv_destroy(struct drm_encoder *encoder)
|
||||
kfree(tv_enc);
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs nv17_tv_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs nv17_tv_helper_funcs = {
|
||||
.dpms = nv17_tv_dpms,
|
||||
.mode_fixup = nv17_tv_mode_fixup,
|
||||
.prepare = nv17_tv_prepare,
|
||||
@ -778,14 +778,14 @@ static struct drm_encoder_helper_funcs nv17_tv_helper_funcs = {
|
||||
.detect = nv17_tv_detect,
|
||||
};
|
||||
|
||||
static struct drm_encoder_slave_funcs nv17_tv_slave_funcs = {
|
||||
static const struct drm_encoder_slave_funcs nv17_tv_slave_funcs = {
|
||||
.get_modes = nv17_tv_get_modes,
|
||||
.mode_valid = nv17_tv_mode_valid,
|
||||
.create_resources = nv17_tv_create_resources,
|
||||
.set_property = nv17_tv_set_property,
|
||||
};
|
||||
|
||||
static struct drm_encoder_funcs nv17_tv_funcs = {
|
||||
static const struct drm_encoder_funcs nv17_tv_funcs = {
|
||||
.destroy = nv17_tv_destroy,
|
||||
};
|
||||
|
||||
|
@ -1046,10 +1046,6 @@ nouveau_platform_device_create(const struct nvkm_device_tegra_func *func,
|
||||
goto err_free;
|
||||
}
|
||||
|
||||
err = drm_dev_set_unique(drm, "%s", dev_name(&pdev->dev));
|
||||
if (err < 0)
|
||||
goto err_free;
|
||||
|
||||
drm->platformdev = pdev;
|
||||
platform_set_drvdata(pdev, drm);
|
||||
|
||||
|
@ -83,7 +83,7 @@ static inline struct drm_encoder *to_drm_encoder(struct nouveau_encoder *enc)
|
||||
return &enc->base.base;
|
||||
}
|
||||
|
||||
static inline struct drm_encoder_slave_funcs *
|
||||
static inline const struct drm_encoder_slave_funcs *
|
||||
get_slave_funcs(struct drm_encoder *enc)
|
||||
{
|
||||
return to_encoder_slave(enc)->slave_funcs;
|
||||
|
@ -87,14 +87,11 @@ struct tcm *sita_init(u16 width, u16 height, struct tcm_pt *attr)
|
||||
if (width == 0 || height == 0)
|
||||
return NULL;
|
||||
|
||||
tcm = kmalloc(sizeof(*tcm), GFP_KERNEL);
|
||||
pvt = kmalloc(sizeof(*pvt), GFP_KERNEL);
|
||||
tcm = kzalloc(sizeof(*tcm), GFP_KERNEL);
|
||||
pvt = kzalloc(sizeof(*pvt), GFP_KERNEL);
|
||||
if (!tcm || !pvt)
|
||||
goto error;
|
||||
|
||||
memset(tcm, 0, sizeof(*tcm));
|
||||
memset(pvt, 0, sizeof(*pvt));
|
||||
|
||||
/* Updating the pointers to SiTA implementation APIs */
|
||||
tcm->height = height;
|
||||
tcm->width = width;
|
||||
|
@ -32,7 +32,7 @@ static void qxl_ttm_bo_destroy(struct ttm_buffer_object *tbo)
|
||||
struct qxl_bo *bo;
|
||||
struct qxl_device *qdev;
|
||||
|
||||
bo = container_of(tbo, struct qxl_bo, tbo);
|
||||
bo = to_qxl_bo(tbo);
|
||||
qdev = (struct qxl_device *)bo->gem_base.dev->dev_private;
|
||||
|
||||
qxl_surface_evict(qdev, bo, false);
|
||||
|
@ -201,7 +201,7 @@ static void qxl_evict_flags(struct ttm_buffer_object *bo,
|
||||
placement->num_busy_placement = 1;
|
||||
return;
|
||||
}
|
||||
qbo = container_of(bo, struct qxl_bo, tbo);
|
||||
qbo = to_qxl_bo(bo);
|
||||
qxl_ttm_placement_from_domain(qbo, QXL_GEM_DOMAIN_CPU, false);
|
||||
*placement = qbo->placement;
|
||||
}
|
||||
@ -365,7 +365,7 @@ static void qxl_bo_move_notify(struct ttm_buffer_object *bo,
|
||||
|
||||
if (!qxl_ttm_bo_is_qxl_bo(bo))
|
||||
return;
|
||||
qbo = container_of(bo, struct qxl_bo, tbo);
|
||||
qbo = to_qxl_bo(bo);
|
||||
qdev = qbo->gem_base.dev->dev_private;
|
||||
|
||||
if (bo->mem.mem_type == TTM_PL_PRIV0 && qbo->surface_id)
|
||||
|
@ -28,7 +28,7 @@ static int rcar_du_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
{
|
||||
struct rcar_du_connector *con = to_rcar_connector(connector);
|
||||
struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
|
||||
struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
|
||||
if (sfuncs->get_modes == NULL)
|
||||
return 0;
|
||||
@ -41,7 +41,7 @@ static int rcar_du_hdmi_connector_mode_valid(struct drm_connector *connector,
|
||||
{
|
||||
struct rcar_du_connector *con = to_rcar_connector(connector);
|
||||
struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
|
||||
struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
|
||||
if (sfuncs->mode_valid == NULL)
|
||||
return MODE_OK;
|
||||
@ -66,7 +66,7 @@ rcar_du_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
||||
{
|
||||
struct rcar_du_connector *con = to_rcar_connector(connector);
|
||||
struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
|
||||
struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
|
||||
if (sfuncs->detect == NULL)
|
||||
return connector_status_unknown;
|
||||
|
@ -35,7 +35,7 @@ struct rcar_du_hdmienc {
|
||||
static void rcar_du_hdmienc_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
|
||||
struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
|
||||
if (sfuncs->dpms)
|
||||
sfuncs->dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||
@ -50,7 +50,7 @@ static void rcar_du_hdmienc_disable(struct drm_encoder *encoder)
|
||||
static void rcar_du_hdmienc_enable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
|
||||
struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
|
||||
if (hdmienc->renc->lvds)
|
||||
rcar_du_lvdsenc_enable(hdmienc->renc->lvds, encoder->crtc,
|
||||
@ -67,7 +67,7 @@ static int rcar_du_hdmienc_atomic_check(struct drm_encoder *encoder,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
|
||||
struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode;
|
||||
const struct drm_display_mode *mode = &crtc_state->mode;
|
||||
|
||||
@ -89,7 +89,7 @@ static void rcar_du_hdmienc_mode_set(struct drm_encoder *encoder,
|
||||
struct drm_display_mode *adjusted_mode)
|
||||
{
|
||||
struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
|
||||
struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
|
||||
|
||||
if (sfuncs->mode_set)
|
||||
sfuncs->mode_set(encoder, mode, adjusted_mode);
|
||||
|
@ -173,7 +173,7 @@ dw_hdmi_rockchip_mode_valid(struct drm_connector *connector,
|
||||
return (valid) ? MODE_OK : MODE_BAD;
|
||||
}
|
||||
|
||||
static struct drm_encoder_funcs dw_hdmi_rockchip_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs dw_hdmi_rockchip_encoder_funcs = {
|
||||
.destroy = drm_encoder_cleanup,
|
||||
};
|
||||
|
||||
@ -218,7 +218,7 @@ static void dw_hdmi_rockchip_encoder_prepare(struct drm_encoder *encoder)
|
||||
ROCKCHIP_OUT_MODE_AAAA);
|
||||
}
|
||||
|
||||
static struct drm_encoder_helper_funcs dw_hdmi_rockchip_encoder_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs dw_hdmi_rockchip_encoder_helper_funcs = {
|
||||
.mode_fixup = dw_hdmi_rockchip_encoder_mode_fixup,
|
||||
.mode_set = dw_hdmi_rockchip_encoder_mode_set,
|
||||
.prepare = dw_hdmi_rockchip_encoder_prepare,
|
||||
|
@ -450,10 +450,6 @@ static int rockchip_drm_bind(struct device *dev)
|
||||
if (!drm)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = drm_dev_set_unique(drm, "%s", dev_name(dev));
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
||||
ret = drm_dev_register(drm, 0);
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
@ -66,7 +66,7 @@ static int rockchip_drm_fb_create_handle(struct drm_framebuffer *fb,
|
||||
rockchip_fb->obj[0], handle);
|
||||
}
|
||||
|
||||
static struct drm_framebuffer_funcs rockchip_drm_fb_funcs = {
|
||||
static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs = {
|
||||
.destroy = rockchip_drm_fb_destroy,
|
||||
.create_handle = rockchip_drm_fb_create_handle,
|
||||
};
|
||||
|
@ -990,7 +990,6 @@ static int host1x_drm_probe(struct host1x_device *dev)
|
||||
if (!drm)
|
||||
return -ENOMEM;
|
||||
|
||||
drm_dev_set_unique(drm, dev_name(&dev->dev));
|
||||
dev_set_drvdata(&dev->dev, drm);
|
||||
|
||||
err = drm_dev_register(drm, 0);
|
||||
|
@ -88,7 +88,7 @@ static int tegra_fb_create_handle(struct drm_framebuffer *framebuffer,
|
||||
return drm_gem_handle_create(file, &fb->planes[0]->gem, handle);
|
||||
}
|
||||
|
||||
static struct drm_framebuffer_funcs tegra_fb_funcs = {
|
||||
static const struct drm_framebuffer_funcs tegra_fb_funcs = {
|
||||
.destroy = tegra_fb_destroy,
|
||||
.create_handle = tegra_fb_create_handle,
|
||||
};
|
||||
|
@ -122,13 +122,13 @@ static void udl_connector_destroy(struct drm_connector *connector)
|
||||
kfree(connector);
|
||||
}
|
||||
|
||||
static struct drm_connector_helper_funcs udl_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs udl_connector_helper_funcs = {
|
||||
.get_modes = udl_get_modes,
|
||||
.mode_valid = udl_mode_valid,
|
||||
.best_encoder = udl_best_single_encoder,
|
||||
};
|
||||
|
||||
static struct drm_connector_funcs udl_connector_funcs = {
|
||||
static const struct drm_connector_funcs udl_connector_funcs = {
|
||||
.dpms = drm_helper_connector_dpms,
|
||||
.detect = udl_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
|
@ -400,7 +400,7 @@ static void udl_crtc_commit(struct drm_crtc *crtc)
|
||||
udl_crtc_dpms(crtc, DRM_MODE_DPMS_ON);
|
||||
}
|
||||
|
||||
static struct drm_crtc_helper_funcs udl_helper_funcs = {
|
||||
static const struct drm_crtc_helper_funcs udl_helper_funcs = {
|
||||
.dpms = udl_crtc_dpms,
|
||||
.mode_fixup = udl_crtc_mode_fixup,
|
||||
.mode_set = udl_crtc_mode_set,
|
||||
|
@ -184,8 +184,6 @@ static int vc4_drm_bind(struct device *dev)
|
||||
vc4->dev = drm;
|
||||
drm->dev_private = vc4;
|
||||
|
||||
drm_dev_set_unique(drm, dev_name(dev));
|
||||
|
||||
vc4_bo_cache_init(drm);
|
||||
|
||||
drm_mode_config_init(drm);
|
||||
|
@ -470,7 +470,7 @@ int vmw_kms_readback(struct vmw_private *dev_priv,
|
||||
}
|
||||
|
||||
|
||||
static struct drm_framebuffer_funcs vmw_framebuffer_surface_funcs = {
|
||||
static const struct drm_framebuffer_funcs vmw_framebuffer_surface_funcs = {
|
||||
.destroy = vmw_framebuffer_surface_destroy,
|
||||
.dirty = vmw_framebuffer_surface_dirty,
|
||||
};
|
||||
@ -647,7 +647,7 @@ static int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct drm_framebuffer_funcs vmw_framebuffer_dmabuf_funcs = {
|
||||
static const struct drm_framebuffer_funcs vmw_framebuffer_dmabuf_funcs = {
|
||||
.destroy = vmw_framebuffer_dmabuf_destroy,
|
||||
.dirty = vmw_framebuffer_dmabuf_dirty,
|
||||
};
|
||||
|
@ -294,7 +294,7 @@ static int vmw_ldu_crtc_set_config(struct drm_mode_set *set)
|
||||
return vmw_ldu_commit_list(dev_priv);
|
||||
}
|
||||
|
||||
static struct drm_crtc_funcs vmw_legacy_crtc_funcs = {
|
||||
static const struct drm_crtc_funcs vmw_legacy_crtc_funcs = {
|
||||
.cursor_set = vmw_du_crtc_cursor_set,
|
||||
.cursor_move = vmw_du_crtc_cursor_move,
|
||||
.gamma_set = vmw_du_crtc_gamma_set,
|
||||
@ -312,7 +312,7 @@ static void vmw_ldu_encoder_destroy(struct drm_encoder *encoder)
|
||||
vmw_ldu_destroy(vmw_encoder_to_ldu(encoder));
|
||||
}
|
||||
|
||||
static struct drm_encoder_funcs vmw_legacy_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs vmw_legacy_encoder_funcs = {
|
||||
.destroy = vmw_ldu_encoder_destroy,
|
||||
};
|
||||
|
||||
@ -325,7 +325,7 @@ static void vmw_ldu_connector_destroy(struct drm_connector *connector)
|
||||
vmw_ldu_destroy(vmw_connector_to_ldu(connector));
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs vmw_legacy_connector_funcs = {
|
||||
static const struct drm_connector_funcs vmw_legacy_connector_funcs = {
|
||||
.dpms = vmw_du_connector_dpms,
|
||||
.detect = vmw_du_connector_detect,
|
||||
.fill_modes = vmw_du_connector_fill_modes,
|
||||
|
@ -530,7 +530,7 @@ out_no_fence:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct drm_crtc_funcs vmw_screen_object_crtc_funcs = {
|
||||
static const struct drm_crtc_funcs vmw_screen_object_crtc_funcs = {
|
||||
.cursor_set = vmw_du_crtc_cursor_set,
|
||||
.cursor_move = vmw_du_crtc_cursor_move,
|
||||
.gamma_set = vmw_du_crtc_gamma_set,
|
||||
@ -548,7 +548,7 @@ static void vmw_sou_encoder_destroy(struct drm_encoder *encoder)
|
||||
vmw_sou_destroy(vmw_encoder_to_sou(encoder));
|
||||
}
|
||||
|
||||
static struct drm_encoder_funcs vmw_screen_object_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs vmw_screen_object_encoder_funcs = {
|
||||
.destroy = vmw_sou_encoder_destroy,
|
||||
};
|
||||
|
||||
@ -561,7 +561,7 @@ static void vmw_sou_connector_destroy(struct drm_connector *connector)
|
||||
vmw_sou_destroy(vmw_connector_to_sou(connector));
|
||||
}
|
||||
|
||||
static struct drm_connector_funcs vmw_sou_connector_funcs = {
|
||||
static const struct drm_connector_funcs vmw_sou_connector_funcs = {
|
||||
.dpms = vmw_du_connector_dpms,
|
||||
.set_property = vmw_du_connector_set_property,
|
||||
.destroy = vmw_sou_connector_destroy,
|
||||
|
@ -1040,7 +1040,7 @@ out_finish:
|
||||
/*
|
||||
* Screen Target CRTC dispatch table
|
||||
*/
|
||||
static struct drm_crtc_funcs vmw_stdu_crtc_funcs = {
|
||||
static const struct drm_crtc_funcs vmw_stdu_crtc_funcs = {
|
||||
.cursor_set = vmw_du_crtc_cursor_set,
|
||||
.cursor_move = vmw_du_crtc_cursor_move,
|
||||
.gamma_set = vmw_du_crtc_gamma_set,
|
||||
@ -1070,7 +1070,7 @@ static void vmw_stdu_encoder_destroy(struct drm_encoder *encoder)
|
||||
vmw_stdu_destroy(vmw_encoder_to_stdu(encoder));
|
||||
}
|
||||
|
||||
static struct drm_encoder_funcs vmw_stdu_encoder_funcs = {
|
||||
static const struct drm_encoder_funcs vmw_stdu_encoder_funcs = {
|
||||
.destroy = vmw_stdu_encoder_destroy,
|
||||
};
|
||||
|
||||
@ -1097,7 +1097,7 @@ static void vmw_stdu_connector_destroy(struct drm_connector *connector)
|
||||
|
||||
|
||||
|
||||
static struct drm_connector_funcs vmw_stdu_connector_funcs = {
|
||||
static const struct drm_connector_funcs vmw_stdu_connector_funcs = {
|
||||
.dpms = vmw_du_connector_dpms,
|
||||
.detect = vmw_du_connector_detect,
|
||||
.fill_modes = vmw_du_connector_fill_modes,
|
||||
|
@ -771,7 +771,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
|
||||
}
|
||||
srf->offsets = kmalloc(srf->num_sizes * sizeof(*srf->offsets),
|
||||
GFP_KERNEL);
|
||||
if (unlikely(srf->sizes == NULL)) {
|
||||
if (unlikely(srf->offsets == NULL)) {
|
||||
ret = -ENOMEM;
|
||||
goto out_no_offsets;
|
||||
}
|
||||
@ -815,11 +815,8 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
|
||||
srf->sizes[0].height == 64 &&
|
||||
srf->format == SVGA3D_A8R8G8B8) {
|
||||
|
||||
srf->snooper.image = kmalloc(64 * 64 * 4, GFP_KERNEL);
|
||||
/* clear the image */
|
||||
if (srf->snooper.image) {
|
||||
memset(srf->snooper.image, 0x00, 64 * 64 * 4);
|
||||
} else {
|
||||
srf->snooper.image = kzalloc(64 * 64 * 4, GFP_KERNEL);
|
||||
if (!srf->snooper.image) {
|
||||
DRM_ERROR("Failed to allocate cursor_image\n");
|
||||
ret = -ENOMEM;
|
||||
goto out_no_copy;
|
||||
|
@ -1068,7 +1068,7 @@ void drm_dev_ref(struct drm_device *dev);
|
||||
void drm_dev_unref(struct drm_device *dev);
|
||||
int drm_dev_register(struct drm_device *dev, unsigned long flags);
|
||||
void drm_dev_unregister(struct drm_device *dev);
|
||||
int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...);
|
||||
int drm_dev_set_unique(struct drm_device *dev, const char *name);
|
||||
|
||||
struct drm_minor *drm_minor_acquire(unsigned int minor_id);
|
||||
void drm_minor_release(struct drm_minor *minor);
|
||||
|
@ -172,7 +172,9 @@ struct drm_framebuffer_funcs {
|
||||
* Clean up framebuffer resources, specifically also unreference the
|
||||
* backing storage. The core guarantees to call this function for every
|
||||
* framebuffer successfully created by ->fb_create() in
|
||||
* &drm_mode_config_funcs.
|
||||
* &drm_mode_config_funcs. Drivers must also call
|
||||
* drm_framebuffer_cleanup() to release DRM core resources for this
|
||||
* framebuffer.
|
||||
*/
|
||||
void (*destroy)(struct drm_framebuffer *framebuffer);
|
||||
|
||||
@ -187,6 +189,9 @@ struct drm_framebuffer_funcs {
|
||||
* copying the current screen contents to a private buffer and blending
|
||||
* between that and the new contents.
|
||||
*
|
||||
* GEM based drivers should call drm_gem_handle_create() to create the
|
||||
* handle.
|
||||
*
|
||||
* RETURNS:
|
||||
*
|
||||
* 0 on success or a negative error code on failure.
|
||||
@ -1731,6 +1736,17 @@ struct drm_mode_config_funcs {
|
||||
* requested metadata, but most of that is left to the driver. See
|
||||
* struct &drm_mode_fb_cmd2 for details.
|
||||
*
|
||||
* If the parameters are deemed valid and the backing storage objects in
|
||||
* the underlying memory manager all exist, then the driver allocates
|
||||
* a new &drm_framebuffer structure, subclassed to contain
|
||||
* driver-specific information (like the internal native buffer object
|
||||
* references). It also needs to fill out all relevant metadata, which
|
||||
* should be done by calling drm_helper_mode_fill_fb_struct().
|
||||
*
|
||||
* The initialization is finalized by calling drm_framebuffer_init(),
|
||||
* which registers the framebuffer and makes it accessible to other
|
||||
* threads.
|
||||
*
|
||||
* RETURNS:
|
||||
*
|
||||
* A new framebuffer with an initial reference count of 1 or a negative
|
||||
|
@ -95,7 +95,7 @@ struct drm_encoder_slave_funcs {
|
||||
struct drm_encoder_slave {
|
||||
struct drm_encoder base;
|
||||
|
||||
struct drm_encoder_slave_funcs *slave_funcs;
|
||||
const struct drm_encoder_slave_funcs *slave_funcs;
|
||||
void *slave_priv;
|
||||
void *bus_priv;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user