/*
*/
/*
* Copyright (c) 2012, 2013, Intel Corporation. All rights reserved.
*/
/*
* Copyright © 2007 Dave Mueller
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* Authors:
* Dave Mueller <dave.mueller@gmx.ch>
*
*/
#include "dvo.h"
/* register definitions according to the TFP410 data sheet */
struct tfp410_priv {
bool quiet;
};
{
{
.flags = 0,
.len = 1,
},
{
.len = 1,
}
};
out_buf[1] = 0;
return true;
};
DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n",
}
return false;
}
{
.flags = 0,
.len = 2,
};
return true;
DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n",
}
return false;
}
{
return -1;
}
/* Ti TFP410 driver for chip on i2c bus */
struct i2c_adapter *adapter)
{
/* this will detect the tfp410 chip on the specified i2c bus */
int id;
return false;
DRM_DEBUG_KMS("tfp410 not detected got VID %X: from %s "
"Slave %d.\n",
goto out;
}
DRM_DEBUG_KMS("tfp410 not detected got DID %X: from %s "
"Slave %d.\n",
goto out;
}
return true;
out:
return false;
}
{
if (ctl2 & TFP410_CTL_2_RSEN)
else
}
return ret;
}
/* LINTED */
/* LINTED */
struct drm_display_mode *mode)
{
return MODE_OK;
}
/* LINTED */
/* LINTED */
struct drm_display_mode *mode,
/* LINTED */
struct drm_display_mode *adjusted_mode)
{
/* As long as the basics are set up, since we don't have clock dependencies
* in the mode setup, we can just leave the registers alone and everything
* will work fine.
*/
/* don't do much */
return;
}
/* set the tfp410 power state */
{
return;
if (enable)
ctl1 |= TFP410_CTL_1_PD;
else
ctl1 &= ~TFP410_CTL_1_PD;
}
{
return false;
if (ctl1 & TFP410_CTL_1_PD)
return true;
else
return false;
}
{
}
{
if (tfp) {
}
}
.init = tfp410_init,
.detect = tfp410_detect,
.dpms = tfp410_dpms,
};