[PATCH 3/4] drm/tilcdc: add encoder slave
Rob Clark
robdclark at gmail.com
Thu Jan 24 09:26:16 EST 2013
On Thu, Jan 24, 2013 at 6:43 AM, Daniel Vetter <daniel at ffwll.ch> wrote:
> On Tue, Jan 22, 2013 at 04:36:24PM -0600, Rob Clark wrote:
>> Add output panel driver for i2c encoder slaves.
>>
>> Signed-off-by: Rob Clark <robdclark at gmail.com>
>
> A few questions below, otherwise
>
> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
>> ---
[snip]
>> diff --git a/drivers/gpu/drm/tilcdc/Kconfig b/drivers/gpu/drm/tilcdc/Kconfig
>> index ee9b592..99beca2 100644
>> --- a/drivers/gpu/drm/tilcdc/Kconfig
>> +++ b/drivers/gpu/drm/tilcdc/Kconfig
>> @@ -8,3 +8,15 @@ config DRM_TILCDC
>> Choose this option if you have an TI SoC with LCDC display
>> controller, for example AM33xx in beagle-bone, DA8xx, or
>> OMAP-L1xx. This driver replaces the FB_DA8XX fbdev driver.
>> +
>> +menu "I2C encoder or helper chips"
>> + depends on DRM && DRM_KMS_HELPER && I2C
>> +
>> +config DRM_I2C_NXP_TDA998X
>> + tristate "NXP Semiconductors TDA998X HDMI encoder"
>> + default m if DRM_TILCDC
>> + help
>> + Support for NXP Semiconductors TDA998X HDMI encoders.
>> +
>> +endmenu
>> +
>
> Shouldn't that hunk be in patch 2?
yeah, probably.. I just copied how it was done in nouveau, but I think
probably the Kconfig for the i2c encoder slaves should be moved into
drivers/gpu/drm/i2c
[snip]
>> +/*
>> + * Encoder:
>> + */
>> +
>> +struct slave_encoder {
>> + struct drm_encoder_slave base;
>> + struct slave_module *mod;
>> +};
>> +#define to_slave_encoder(x) container_of(to_encoder_slave(x), struct slave_encoder, base)
>
> Since you have a 1:1:1 relationship between module/drm_encoder, the
> drm_encoder_slave and the connector I'd just smash this all into one
> struct. Pure bikeshed though ;-)
yeah, but drm_encoder_slave is coming from drm core
[snip]
>> +static struct drm_encoder *slave_encoder_create(struct drm_device *dev,
>> + struct slave_module *mod)
>> +{
>> + struct slave_encoder *slave_encoder;
>> + struct drm_encoder *encoder;
>> + int ret;
>> +
>> + slave_encoder = kzalloc(sizeof(*slave_encoder), GFP_KERNEL);
>> + if (!slave_encoder) {
>> + dev_err(dev->dev, "allocation failed\n");
>> + return NULL;
>> + }
>> +
>> + slave_encoder->mod = mod;
>> +
>> + encoder = &slave_encoder->base.base;
>> + encoder->possible_crtcs = 1;
>> +
>> + ret = drm_encoder_init(dev, encoder, &slave_encoder_funcs,
>> + DRM_MODE_ENCODER_LVDS);
>
> DRM_MODE_ENCODER_TMDS? Although I guess adding a new kind of
> multi-function encoder type would make more sense and also useful in other
> places. E.g. i915-sdvo/dvo just set meaningless types for multi-function
> encoders (i.e. more than one connector on the same output), namely the
> type which matches the connector last initalized.
I suppose TDMS makes more sense.. perhaps getting both this and
connector type from the encoder-slave would make the most sense, but I
can change it to TDMS for now
[snip]
>> +static struct drm_connector *slave_connector_create(struct drm_device *dev,
>> + struct slave_module *mod, struct drm_encoder *encoder)
>> +{
>> + struct slave_connector *slave_connector;
>> + struct drm_connector *connector;
>> + int ret;
>> +
>> + slave_connector = kzalloc(sizeof(*slave_connector), GFP_KERNEL);
>> + if (!slave_connector) {
>> + dev_err(dev->dev, "allocation failed\n");
>> + return NULL;
>> + }
>> +
>> + slave_connector->encoder = encoder;
>> + slave_connector->mod = mod;
>> +
>> + connector = &slave_connector->base;
>> +
>> + drm_connector_init(dev, connector, &slave_connector_funcs,
>> + DRM_MODE_CONNECTOR_HDMIA);
>
> Shouldn't we get the connector type from the drm_encoder_slave somehow?
> Works here for now, so just food for thought for future encoder slave
> refactorings and infrastructure work.
yeah, getting it from the encoder slave makes the most sense
[snip]
>> +static struct of_device_id slave_of_match[] = {
>> + { .compatible = "tilcdc,slave", },
>> + { },
>> +};
>> +MODULE_DEVICE_TABLE(of, slave_of_match);
>> +
>> +struct platform_driver slave_driver = {
>> + .probe = slave_probe,
>> + .remove = slave_remove,
>> + .driver = {
>> + .owner = THIS_MODULE,
>> + .name = "slave",
>> + .of_match_table = slave_of_match,
>> + },
>> +};
>
> No idea how this devicetree matching stuff is supposed to work, but I
> guess this needs to be updated in the devictree docs like the base match.
yeah, I didn't realize previously about the DT bindings docs, so I
need to look into that
BR,
-R
More information about the linux-arm-kernel
mailing list