// SPDX-License-Identifier: GPL-2.0
#define DSS_SUBSYS_NAME "HDMI"
#include <linux/kernel.h>
#include <linux/err.h>
#include <linux/of.h>
#include "omapdss.h"
#include "hdmi.h"
int hdmi_parse_lanes_of(struct platform_device *pdev, struct device_node *ep,
struct hdmi_phy_data *phy)
{
struct property *prop;
int r, len;
prop = of_find_property(ep, "lanes" , &len);
if (prop) {
u32 lanes[8 ];
if (len / sizeof (u32) != ARRAY_SIZE(lanes)) {
dev_err(&pdev->dev, "bad number of lanes\n" );
return -EINVAL;
}
r = of_property_read_u32_array(ep, "lanes" , lanes,
ARRAY_SIZE(lanes));
if (r) {
dev_err(&pdev->dev, "failed to read lane data\n" );
return r;
}
r = hdmi_phy_parse_lanes(phy, lanes);
if (r) {
dev_err(&pdev->dev, "failed to parse lane data\n" );
return r;
}
} else {
static const u32 default_lanes[] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 };
r = hdmi_phy_parse_lanes(phy, default_lanes);
if (WARN_ON(r)) {
dev_err(&pdev->dev, "failed to parse lane data\n" );
return r;
}
}
return 0 ;
}
int hdmi_compute_acr(u32 pclk, u32 sample_freq, u32 *n, u32 *cts)
{
u32 deep_color;
bool deep_color_correct = false ;
if (n == NULL || cts == NULL)
return -EINVAL;
/* TODO: When implemented, query deep color mode here. */
deep_color = 100 ;
/*
* When using deep color , the default N value ( as in the HDMI
* specification ) yields to an non - integer CTS . Hence , we
* modify it while keeping the restrictions described in
* section 7 . 2 . 1 of the HDMI 1 . 4 a specification .
*/
switch (sample_freq) {
case 32000 :
case 48000 :
case 96000 :
case 192000 :
if (deep_color == 125 )
if (pclk == 27027000 || pclk == 74250000 )
deep_color_correct = true ;
if (deep_color == 150 )
if (pclk == 27027000 )
deep_color_correct = true ;
break ;
case 44100 :
case 88200 :
case 176400 :
if (deep_color == 125 )
if (pclk == 27027000 )
deep_color_correct = true ;
break ;
default :
return -EINVAL;
}
if (deep_color_correct) {
switch (sample_freq) {
case 32000 :
*n = 8192 ;
break ;
case 44100 :
*n = 12544 ;
break ;
case 48000 :
*n = 8192 ;
break ;
case 88200 :
*n = 25088 ;
break ;
case 96000 :
*n = 16384 ;
break ;
case 176400 :
*n = 50176 ;
break ;
case 192000 :
*n = 32768 ;
break ;
default :
return -EINVAL;
}
} else {
switch (sample_freq) {
case 32000 :
*n = 4096 ;
break ;
case 44100 :
*n = 6272 ;
break ;
case 48000 :
*n = 6144 ;
break ;
case 88200 :
*n = 12544 ;
break ;
case 96000 :
*n = 12288 ;
break ;
case 176400 :
*n = 25088 ;
break ;
case 192000 :
*n = 24576 ;
break ;
default :
return -EINVAL;
}
}
/* Calculate CTS. See HDMI 1.3a or 1.4a specifications */
*cts = (pclk/1000 ) * (*n / 128 ) * deep_color / (sample_freq / 10 );
return 0 ;
}
Messung V0.5 in Prozent C=98 H=100 G=98
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-10-03)
¤
*© Formatika GbR, Deutschland