Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
417 changes: 417 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-1.json

Large diffs are not rendered by default.

420 changes: 420 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-2.json

Large diffs are not rendered by default.

420 changes: 420 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-3.json

Large diffs are not rendered by default.

1,800 changes: 1,800 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-4.json

Large diffs are not rendered by default.

417 changes: 417 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-5.json

Large diffs are not rendered by default.

420 changes: 420 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-6.json

Large diffs are not rendered by default.

420 changes: 420 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-7.json

Large diffs are not rendered by default.

2,472 changes: 2,472 additions & 0 deletions config/linux/ipu75xa/sensors/isx031-8.json

Large diffs are not rendered by default.

33 changes: 33 additions & 0 deletions src/platformdata/CameraSensorsParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,12 @@ void CameraSensorsParser::parseMediaCtlRouteObject(const Json::Value& node, Medi
route.entity = mMediaCtl->getEntityIdByName(route.entityName);
}
}
if (ele.isMember("acpiName")) {
route.entityName = mMediaCtl->acpiName2EntityName(ele["acpiName"].asString());
if (mMediaCtl != nullptr) {
route.entity = mMediaCtl->getEntityIdByName(route.entityName);
}
}
if (ele.isMember("srcPad")) {
route.srcPad = ele["srcPad"].asInt();
}
Expand Down Expand Up @@ -156,6 +162,11 @@ void CameraSensorsParser::parseMediaCtlControlObject(const Json::Value& node, Me
if (mMediaCtl)
ctl.entity = mMediaCtl->getEntityIdByName(ctl.entityName);
}
if (ele.isMember("acpiName")) {
ctl.entityName = mMediaCtl->acpiName2EntityName(ele["acpiName"].asString());
if (mMediaCtl)
ctl.entity = mMediaCtl->getEntityIdByName(ctl.entityName);
}
if (ele.isMember("ctrlId")) {
const auto target = ele["ctrlId"].asString();
if (ctlCmdMapTable.find(target) != ctlCmdMapTable.end())
Expand Down Expand Up @@ -184,6 +195,11 @@ void CameraSensorsParser::parseMediaCtlLinkObject(const Json::Value& node, Media
if (mMediaCtl)
link.srcEntity = mMediaCtl->getEntityIdByName(link.srcEntityName);
}
if (ele.isMember("srcAcpiName")) {
link.srcEntityName = mMediaCtl->acpiName2EntityName(ele["srcAcpiName"].asString());
if (mMediaCtl)
link.srcEntity = mMediaCtl->getEntityIdByName(link.srcEntityName);
}
if (ele.isMember("srcPad")) {
link.srcPad = ele["srcPad"].asInt();
}
Expand All @@ -192,6 +208,11 @@ void CameraSensorsParser::parseMediaCtlLinkObject(const Json::Value& node, Media
if (mMediaCtl)
link.sinkEntity = mMediaCtl->getEntityIdByName(link.sinkEntityName);
}
if (ele.isMember("sinkAcpiName")) {
link.sinkEntityName = mMediaCtl->acpiName2EntityName(ele["sinkAcpiName"].asString());
if (mMediaCtl)
link.sinkEntity = mMediaCtl->getEntityIdByName(link.sinkEntityName);
}
if (ele.isMember("sinkPad")) {
link.sinkPad = ele["sinkPad"].asInt();
}
Expand Down Expand Up @@ -227,6 +248,12 @@ void CameraSensorsParser::parseMediaCtlConfigFormatsObject(const Json::Value& no
fmt.entity = mMediaCtl->getEntityIdByName(fmt.entityName);
}
}
if (ele.isMember("acpiName")) {
fmt.entityName = mMediaCtl->acpiName2EntityName(ele["acpiName"].asString());
if (mMediaCtl != nullptr) {
fmt.entity = mMediaCtl->getEntityIdByName(fmt.entityName);
}
}
if (ele.isMember("pad")) {
fmt.pad = ele["pad"].asUInt();
}
Expand Down Expand Up @@ -315,6 +342,12 @@ void CameraSensorsParser::parseMediaCtlSelectionObject(const Json::Value& node,
sel.entity = mMediaCtl->getEntityIdByName(sel.entityName);
}
}
if (ele.isMember("acpiName")) {
sel.entityName = mMediaCtl->acpiName2EntityName(ele["acpiName"].asString());
if (mMediaCtl != nullptr) {
sel.entity = mMediaCtl->getEntityIdByName(sel.entityName);
}
}
if (ele.isMember("pad")) {
sel.pad = ele["pad"].asInt();
}
Expand Down
27 changes: 26 additions & 1 deletion src/v4l2/MediaControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ struct MediaEntity {
unsigned int numLinks;

char devname[32];
char acpiname[32];
};

MediaControl* MediaControl::sInstance = nullptr;
Expand Down Expand Up @@ -504,7 +505,7 @@ int MediaControl::getDevnameFromSysfs(MediaEntity* entity) {

ret = readlink(sysName, target, MAX_TARGET_NAME);
if (ret <= 0) {
LOGE("readlink sysName %s failed ret %d.", sysName, ret);
LOGE("readlink entity %s sysName %s failed ret %d.", entity->info.name, sysName, ret);
return -EINVAL;
}
target[MAX_TARGET_NAME - 1] = '\0';
Expand All @@ -530,6 +531,20 @@ int MediaControl::getDevnameFromSysfs(MediaEntity* entity) {
snprintf(entity->devname, sizeof(entity->devname), "/dev/%s", d);
}

strlcat(sysName, "/device/firmware_node/path", sizeof(sysName));
FILE* fp = fopen(sysName, "rb");
if (fp) {
fgets(entity->acpiname, sizeof(entity->acpiname), fp);

size_t len = strlen(entity->acpiname);
if (len > 0 && entity->acpiname[len - 1] == '\n') {
entity->acpiname[len - 1] = '\0';
}

fclose(fp);
}
LOG1("name %s devname %s acpiname %s", entity->info.name, entity->devname, entity->acpiname);

return 0;
}

Expand Down Expand Up @@ -1019,6 +1034,16 @@ int MediaControl::getI2CBusAddress(const string& sensorEntityName, const string&
return UNKNOWN_ERROR;
}

std::string MediaControl::acpiName2EntityName(const std::string& acpiName) {
for (auto& entity : mEntities) {
if (strcmp(entity.acpiname, acpiName.c_str()) == 0) {
return std::string(entity.info.name);
}
}

return "";
}

// DUMP_ENTITY_TOPOLOGY_S
void MediaControl::dumpTopologyDot() {
printf("digraph board {\n");
Expand Down
2 changes: 2 additions & 0 deletions src/v4l2/MediaControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,8 @@ class MediaControl {
int getI2CBusAddress(const std::string& sensorEntityName, const std::string& sinkEntityName,
std::string* i2cBus);

std::string acpiName2EntityName(const std::string& acpiName);

private:
MediaControl& operator=(const MediaControl&);
MediaControl(const char* devName);
Expand Down