Skip to content

Commit a735831

Browse files
lumagDanilo Krummrich
authored andcommitted
drm/nouveau: vendor in drm_encoder_slave API
Nouveau driver is the only user of the drm_encoder_slave API. Rework necessary bits of drm_encoder_slave into the nouveau_i2c_encoder API and drop drm_encoder_slave.c from the DRM KMS helper. Suggested-by: Laurent Pinchart <[email protected]> Signed-off-by: Dmitry Baryshkov <[email protected]> Signed-off-by: Danilo Krummrich <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 9a0dfe9 commit a735831

File tree

13 files changed

+147
-207
lines changed

13 files changed

+147
-207
lines changed

drivers/gpu/drm/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ drm_kms_helper-y := \
135135
drm_atomic_state_helper.o \
136136
drm_crtc_helper.o \
137137
drm_damage_helper.o \
138-
drm_encoder_slave.o \
139138
drm_flip_work.o \
140139
drm_format_helper.o \
141140
drm_gem_atomic_helper.o \

drivers/gpu/drm/nouveau/dispnv04/Kbuild

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ nouveau-y += dispnv04/dac.o
66
nouveau-y += dispnv04/dfp.o
77
nouveau-y += dispnv04/disp.o
88
nouveau-y += dispnv04/hw.o
9+
nouveau-y += dispnv04/nouveau_i2c_encoder.o
910
nouveau-y += dispnv04/overlay.o
1011
nouveau-y += dispnv04/tvmodesnv17.o
1112
nouveau-y += dispnv04/tvnv04.o

drivers/gpu/drm/nouveau/dispnv04/dfp.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ static struct drm_encoder *get_tmds_slave(struct drm_encoder *encoder)
171171
list_for_each_entry(slave, &dev->mode_config.encoder_list, head) {
172172
struct dcb_output *slave_dcb = nouveau_encoder(slave)->dcb;
173173

174-
if (slave_dcb->type == DCB_OUTPUT_TMDS && get_slave_funcs(slave) &&
174+
if (slave_dcb->type == DCB_OUTPUT_TMDS && get_encoder_i2c_funcs(slave) &&
175175
slave_dcb->tmdsconf.slave_addr == dcb->tmdsconf.slave_addr)
176176
return slave;
177177
}
@@ -473,8 +473,9 @@ static void nv04_dfp_commit(struct drm_encoder *encoder)
473473
/* Init external transmitters */
474474
slave_encoder = get_tmds_slave(encoder);
475475
if (slave_encoder)
476-
get_slave_funcs(slave_encoder)->mode_set(
477-
slave_encoder, &nv_encoder->mode, &nv_encoder->mode);
476+
get_encoder_i2c_funcs(slave_encoder)->mode_set(slave_encoder,
477+
&nv_encoder->mode,
478+
&nv_encoder->mode);
478479

479480
helper->dpms(encoder, DRM_MODE_DPMS_ON);
480481

@@ -614,8 +615,8 @@ static void nv04_dfp_destroy(struct drm_encoder *encoder)
614615
{
615616
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
616617

617-
if (get_slave_funcs(encoder))
618-
get_slave_funcs(encoder)->destroy(encoder);
618+
if (get_encoder_i2c_funcs(encoder))
619+
get_encoder_i2c_funcs(encoder)->destroy(encoder);
619620

620621
drm_encoder_cleanup(encoder);
621622
kfree(nv_encoder);
@@ -649,8 +650,8 @@ static void nv04_tmds_slave_init(struct drm_encoder *encoder)
649650
if (type < 0)
650651
return;
651652

652-
drm_i2c_encoder_init(dev, to_encoder_slave(encoder),
653-
&bus->i2c, &info[type].dev);
653+
nouveau_i2c_encoder_init(dev, to_encoder_i2c(encoder),
654+
&bus->i2c, &info[type].dev);
654655
}
655656

656657
static const struct drm_encoder_helper_funcs nv04_lvds_helper_funcs = {

drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ static void ch7006_encoder_destroy(struct drm_encoder *encoder)
4747
drm_property_destroy(encoder->dev, priv->scale_property);
4848

4949
kfree(priv);
50-
to_encoder_slave(encoder)->slave_priv = NULL;
50+
to_encoder_i2c(encoder)->encoder_i2c_priv = NULL;
5151

52-
drm_i2c_encoder_destroy(encoder);
52+
nouveau_i2c_encoder_destroy(encoder);
5353
}
5454

5555
static void ch7006_encoder_dpms(struct drm_encoder *encoder, int mode)
5656
{
57-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
57+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
5858
struct ch7006_priv *priv = to_ch7006_priv(encoder);
5959
struct ch7006_state *state = &priv->state;
6060

@@ -71,7 +71,7 @@ static void ch7006_encoder_dpms(struct drm_encoder *encoder, int mode)
7171

7272
static void ch7006_encoder_save(struct drm_encoder *encoder)
7373
{
74-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
74+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
7575
struct ch7006_priv *priv = to_ch7006_priv(encoder);
7676

7777
ch7006_dbg(client, "\n");
@@ -81,7 +81,7 @@ static void ch7006_encoder_save(struct drm_encoder *encoder)
8181

8282
static void ch7006_encoder_restore(struct drm_encoder *encoder)
8383
{
84-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
84+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
8585
struct ch7006_priv *priv = to_ch7006_priv(encoder);
8686

8787
ch7006_dbg(client, "\n");
@@ -116,7 +116,7 @@ static void ch7006_encoder_mode_set(struct drm_encoder *encoder,
116116
struct drm_display_mode *drm_mode,
117117
struct drm_display_mode *adjusted_mode)
118118
{
119-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
119+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
120120
struct ch7006_priv *priv = to_ch7006_priv(encoder);
121121
struct ch7006_encoder_params *params = &priv->params;
122122
struct ch7006_state *state = &priv->state;
@@ -179,7 +179,7 @@ static void ch7006_encoder_mode_set(struct drm_encoder *encoder,
179179
static enum drm_connector_status ch7006_encoder_detect(struct drm_encoder *encoder,
180180
struct drm_connector *connector)
181181
{
182-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
182+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
183183
struct ch7006_priv *priv = to_ch7006_priv(encoder);
184184
struct ch7006_state *state = &priv->state;
185185
int det;
@@ -285,7 +285,7 @@ static int ch7006_encoder_set_property(struct drm_encoder *encoder,
285285
struct drm_property *property,
286286
uint64_t val)
287287
{
288-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
288+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
289289
struct ch7006_priv *priv = to_ch7006_priv(encoder);
290290
struct ch7006_state *state = &priv->state;
291291
struct drm_mode_config *conf = &encoder->dev->mode_config;
@@ -370,7 +370,7 @@ static int ch7006_encoder_set_property(struct drm_encoder *encoder,
370370
return 0;
371371
}
372372

373-
static const struct drm_encoder_slave_funcs ch7006_encoder_funcs = {
373+
static const struct nouveau_i2c_encoder_funcs ch7006_encoder_funcs = {
374374
.set_config = ch7006_encoder_set_config,
375375
.destroy = ch7006_encoder_destroy,
376376
.dpms = ch7006_encoder_dpms,
@@ -437,7 +437,7 @@ static int ch7006_resume(struct device *dev)
437437

438438
static int ch7006_encoder_init(struct i2c_client *client,
439439
struct drm_device *dev,
440-
struct drm_encoder_slave *encoder)
440+
struct nouveau_i2c_encoder *encoder)
441441
{
442442
struct ch7006_priv *priv;
443443
int i;
@@ -448,8 +448,8 @@ static int ch7006_encoder_init(struct i2c_client *client,
448448
if (!priv)
449449
return -ENOMEM;
450450

451-
encoder->slave_priv = priv;
452-
encoder->slave_funcs = &ch7006_encoder_funcs;
451+
encoder->encoder_i2c_priv = priv;
452+
encoder->encoder_i2c_funcs = &ch7006_encoder_funcs;
453453

454454
priv->norm = TV_NORM_PAL;
455455
priv->select_subconnector = DRM_MODE_SUBCONNECTOR_Automatic;
@@ -495,7 +495,7 @@ static const struct dev_pm_ops ch7006_pm_ops = {
495495
.resume = ch7006_resume,
496496
};
497497

498-
static struct drm_i2c_encoder_driver ch7006_driver = {
498+
static struct nouveau_i2c_encoder_driver ch7006_driver = {
499499
.i2c_driver = {
500500
.probe = ch7006_probe,
501501
.remove = ch7006_remove,
@@ -516,12 +516,12 @@ static struct drm_i2c_encoder_driver ch7006_driver = {
516516

517517
static int __init ch7006_init(void)
518518
{
519-
return drm_i2c_encoder_register(THIS_MODULE, &ch7006_driver);
519+
return i2c_add_driver(&ch7006_driver.i2c_driver);
520520
}
521521

522522
static void __exit ch7006_exit(void)
523523
{
524-
drm_i2c_encoder_unregister(&ch7006_driver);
524+
i2c_del_driver(&ch7006_driver.i2c_driver);
525525
}
526526

527527
int ch7006_debug;

drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_mode.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ const struct ch7006_mode *ch7006_lookup_mode(struct drm_encoder *encoder,
198198

199199
void ch7006_setup_levels(struct drm_encoder *encoder)
200200
{
201-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
201+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
202202
struct ch7006_priv *priv = to_ch7006_priv(encoder);
203203
uint8_t *regs = priv->state.regs;
204204
const struct ch7006_tv_norm_info *norm = &ch7006_tv_norms[priv->norm];
@@ -229,7 +229,7 @@ void ch7006_setup_levels(struct drm_encoder *encoder)
229229

230230
void ch7006_setup_subcarrier(struct drm_encoder *encoder)
231231
{
232-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
232+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
233233
struct ch7006_priv *priv = to_ch7006_priv(encoder);
234234
struct ch7006_state *state = &priv->state;
235235
const struct ch7006_tv_norm_info *norm = &ch7006_tv_norms[priv->norm];
@@ -253,7 +253,7 @@ void ch7006_setup_subcarrier(struct drm_encoder *encoder)
253253

254254
void ch7006_setup_pll(struct drm_encoder *encoder)
255255
{
256-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
256+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
257257
struct ch7006_priv *priv = to_ch7006_priv(encoder);
258258
uint8_t *regs = priv->state.regs;
259259
const struct ch7006_mode *mode = priv->mode;
@@ -324,7 +324,7 @@ void ch7006_setup_power_state(struct drm_encoder *encoder)
324324

325325
void ch7006_setup_properties(struct drm_encoder *encoder)
326326
{
327-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
327+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
328328
struct ch7006_priv *priv = to_ch7006_priv(encoder);
329329
struct ch7006_state *state = &priv->state;
330330
const struct ch7006_tv_norm_info *norm = &ch7006_tv_norms[priv->norm];

drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
#ifndef __NOUVEAU_I2C_CH7006_PRIV_H__
2828
#define __NOUVEAU_I2C_CH7006_PRIV_H__
2929

30-
#include <drm/drm_encoder_slave.h>
3130
#include <drm/drm_probe_helper.h>
3231

32+
#include <dispnv04/i2c/encoder_i2c.h>
3333
#include <dispnv04/i2c/ch7006.h>
3434

3535
typedef int64_t fixed;
@@ -100,7 +100,7 @@ struct ch7006_priv {
100100
};
101101

102102
#define to_ch7006_priv(x) \
103-
((struct ch7006_priv *)to_encoder_slave(x)->slave_priv)
103+
((struct ch7006_priv *)to_encoder_i2c(x)->encoder_i2c_priv)
104104

105105
extern int ch7006_debug;
106106
extern char *ch7006_tv_norm;

drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727
#include <linux/module.h>
2828

2929
#include <drm/drm_drv.h>
30-
#include <drm/drm_encoder_slave.h>
3130
#include <drm/drm_print.h>
3231
#include <drm/drm_probe_helper.h>
3332

33+
#include <dispnv04/i2c/encoder_i2c.h>
3434
#include <dispnv04/i2c/sil164.h>
3535

3636
struct sil164_priv {
@@ -42,7 +42,7 @@ struct sil164_priv {
4242
};
4343

4444
#define to_sil164_priv(x) \
45-
((struct sil164_priv *)to_encoder_slave(x)->slave_priv)
45+
((struct sil164_priv *)to_encoder_i2c(x)->encoder_i2c_priv)
4646

4747
#define sil164_dbg(client, format, ...) do { \
4848
if (drm_debug_enabled(DRM_UT_KMS)) \
@@ -222,7 +222,7 @@ sil164_encoder_dpms(struct drm_encoder *encoder, int mode)
222222
bool on = (mode == DRM_MODE_DPMS_ON);
223223
bool duallink = (on && encoder->crtc->mode.clock > 165000);
224224

225-
sil164_set_power_state(drm_i2c_encoder_get_client(encoder), on);
225+
sil164_set_power_state(nouveau_i2c_encoder_get_client(encoder), on);
226226

227227
if (priv->duallink_slave)
228228
sil164_set_power_state(priv->duallink_slave, duallink);
@@ -233,7 +233,7 @@ sil164_encoder_save(struct drm_encoder *encoder)
233233
{
234234
struct sil164_priv *priv = to_sil164_priv(encoder);
235235

236-
sil164_save_state(drm_i2c_encoder_get_client(encoder),
236+
sil164_save_state(nouveau_i2c_encoder_get_client(encoder),
237237
priv->saved_state);
238238

239239
if (priv->duallink_slave)
@@ -246,7 +246,7 @@ sil164_encoder_restore(struct drm_encoder *encoder)
246246
{
247247
struct sil164_priv *priv = to_sil164_priv(encoder);
248248

249-
sil164_restore_state(drm_i2c_encoder_get_client(encoder),
249+
sil164_restore_state(nouveau_i2c_encoder_get_client(encoder),
250250
priv->saved_state);
251251

252252
if (priv->duallink_slave)
@@ -278,7 +278,7 @@ sil164_encoder_mode_set(struct drm_encoder *encoder,
278278
struct sil164_priv *priv = to_sil164_priv(encoder);
279279
bool duallink = adjusted_mode->clock > 165000;
280280

281-
sil164_init_state(drm_i2c_encoder_get_client(encoder),
281+
sil164_init_state(nouveau_i2c_encoder_get_client(encoder),
282282
&priv->config, duallink);
283283

284284
if (priv->duallink_slave)
@@ -292,7 +292,7 @@ static enum drm_connector_status
292292
sil164_encoder_detect(struct drm_encoder *encoder,
293293
struct drm_connector *connector)
294294
{
295-
struct i2c_client *client = drm_i2c_encoder_get_client(encoder);
295+
struct i2c_client *client = nouveau_i2c_encoder_get_client(encoder);
296296

297297
if (sil164_read(client, SIL164_DETECT) & SIL164_DETECT_HOTPLUG_STAT)
298298
return connector_status_connected;
@@ -331,10 +331,10 @@ sil164_encoder_destroy(struct drm_encoder *encoder)
331331
i2c_unregister_device(priv->duallink_slave);
332332

333333
kfree(priv);
334-
drm_i2c_encoder_destroy(encoder);
334+
nouveau_i2c_encoder_destroy(encoder);
335335
}
336336

337-
static const struct drm_encoder_slave_funcs sil164_encoder_funcs = {
337+
static const struct nouveau_i2c_encoder_funcs sil164_encoder_funcs = {
338338
.set_config = sil164_encoder_set_config,
339339
.destroy = sil164_encoder_destroy,
340340
.dpms = sil164_encoder_dpms,
@@ -394,7 +394,7 @@ sil164_detect_slave(struct i2c_client *client)
394394
static int
395395
sil164_encoder_init(struct i2c_client *client,
396396
struct drm_device *dev,
397-
struct drm_encoder_slave *encoder)
397+
struct nouveau_i2c_encoder *encoder)
398398
{
399399
struct sil164_priv *priv;
400400
struct i2c_client *slave_client;
@@ -403,8 +403,8 @@ sil164_encoder_init(struct i2c_client *client,
403403
if (!priv)
404404
return -ENOMEM;
405405

406-
encoder->slave_priv = priv;
407-
encoder->slave_funcs = &sil164_encoder_funcs;
406+
encoder->encoder_i2c_priv = priv;
407+
encoder->encoder_i2c_funcs = &sil164_encoder_funcs;
408408

409409
slave_client = sil164_detect_slave(client);
410410
if (!IS_ERR(slave_client))
@@ -419,7 +419,7 @@ static const struct i2c_device_id sil164_ids[] = {
419419
};
420420
MODULE_DEVICE_TABLE(i2c, sil164_ids);
421421

422-
static struct drm_i2c_encoder_driver sil164_driver = {
422+
static struct nouveau_i2c_encoder_driver sil164_driver = {
423423
.i2c_driver = {
424424
.probe = sil164_probe,
425425
.driver = {
@@ -435,13 +435,13 @@ static struct drm_i2c_encoder_driver sil164_driver = {
435435
static int __init
436436
sil164_init(void)
437437
{
438-
return drm_i2c_encoder_register(THIS_MODULE, &sil164_driver);
438+
return i2c_add_driver(&sil164_driver.i2c_driver);
439439
}
440440

441441
static void __exit
442442
sil164_exit(void)
443443
{
444-
drm_i2c_encoder_unregister(&sil164_driver);
444+
i2c_del_driver(&sil164_driver.i2c_driver);
445445
}
446446

447447
MODULE_AUTHOR("Francisco Jerez <[email protected]>");

0 commit comments

Comments
 (0)