原理
gc2093 チップのマニュアルを確認し、レジスタ 0x0017 の値を変更すると、カメラ プレビューのミラー効果を変更できます。次のように:
#define GC2093_MIRROR_FLIP_REG 0x0017
#define MIRROR_MASK BIT(0)
#define FLIP_MASK BIT(1)
方法
ドライバーを修正することでgc2093.c
カメラプレビューのミラー効果を変更できます。このドライバーでは、ミラー効果に関連するコードの後に、コントロール ID に関連する操作がV4L2_CID_HFLIP
続く必要があります。V4L2_CID_VFLIP
V4L2_CID_HFLIP
コントロール ID は水平ミラーリングの制御に使用され、V4L2_CID_VFLIP
コントロール ID は垂直ミラーリングの制御に使用されます。これら 2 つのcase
ブランチで変更を加え、適切なビットを設定することでさまざまなミラーリング効果を実現します。一般的なアプローチは、ビット操作とマスクを使用して、対応するビットを設定またはクリアすることです。
たとえば、水平ミラーリングを有効にしたい場合は、case V4L2_CID_HFLIP
次のようにブランチを変更できます。
case V4L2_CID_HFLIP:
regmap_update_bits(gc2093->regmap, GC2093_MIRROR_FLIP_REG, MIRROR_MASK, MIRROR_MASK);
break;
これは、regmap_update_bits
関数を使用してMIRROR_MASK
ビットを 1 に設定し、水平ミラーリングをオンにします。
case V4L2_CID_VFLIP
同様に、垂直ミラーリングを有効にする場合は、次のようにブランチを変更できます。
case V4L2_CID_VFLIP:
regmap_update_bits(gc2093->regmap, GC2093_MIRROR_FLIP_REG, FLIP_MASK, FLIP_MASK);
break;
これは、regmap_update_bits
関数を使用してFLIP_MASK
ビットを 1 に設定し、垂直ミラーリングをオンにします。
以下のように修正するためにここにいます
regmap_update_bits解析
regmap_update_bits
Linux カーネルでレジスタの特定のビットを更新するために使用される関数です。regmap
インターフェースを介してレジスタに対するビット操作を実行するためのユーティリティ関数です。
この関数のプロトタイプは次のとおりです。
int regmap_update_bits(struct regmap *map, unsigned int reg,
unsigned int mask, unsigned int val);
パラメータの説明:
map
:struct regmap
演算対象のレジスタマップを示す構造体へのポインタ。reg
:更新するレジスタアドレスを示します。mask
: 更新するレジスタ ビットを表すマスク。マスクに対応するビットのみが変更され、他のビットは変更されません。val
:書き込む値を示します。対応するビットに値を書き込みます。
regmap_update_bits
この関数の機能は、指定されたマスクと値に従ってレジスタの特定のビットを更新することです。この関数はレジスタの現在の値を読み取り、更新するビットをマスクに従って指定された値に設定し、他のビットは変更しないままにし、更新された値をレジスタに書き込みます。このようにして、他のビットの値に影響を与えることなく、レジスタビットの選択的な更新を実現できます。
この関数を使用する場合は、最初にオブジェクトをregmap_update_bits
初期化し、レジスタ マップが適切に構成されていることを確認する必要があります。regmap
この関数を呼び出すと、レジスタの特定のビットの読み取り、変更、書き込みが便利になり、レジスタの正確な制御と構成を実現できます。